平時網上看到別人寫的多是彈出一些基本控件。由於項目中用到的是彈出一個listView,所以就拿它來舉例吧!
由於使用Dialog建立的對話框必須要有標題,如果不調用它的setTitle()則標題區域會變成空白。所以如果不希望有標題哪怕是空白標題,就選擇AlertDialog來創建自定義的對話框吧!
上代碼:
一:首先,寫一個布局文件。就一個按鈕。並且設置它的監聽事件:這個布局文件就略了。在它的監聽事件里面聲明一個方法,actionAlertDialog()
btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { actionAlertDialog(); } });
二:其次,寫第二個布局文件。這個文件就是要彈出的界面布局文件,命名為:myview.xml。如下:注意注意!給root命名了id:layout_myview.這個以后要用到!
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_myview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/mylistview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:cacheColorHint="#ffffff" android:divider="#ffffff" android:dividerHeight="1dip" android:listSelector="#00000000" > </ListView> </LinearLayout>
listview item項如下:命名為:item_listview
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" android:orientation="horizontal" > <ImageView android:id="@+id/item_pic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/item_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#003399" android:paddingRight="10dp" android:text="小寶" /> <TextView android:id="@+id/item_birth" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#003399" android:paddingRight="10dp" android:text="2012-8-23" /> <Button android:id="@+id/item_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="點我" /> </LinearLayout>
三:給自定義的ListView寫一個適配器,命名為MyAdapter,注意,列表里的按鈕監聽事件是加到了這里哦~
/** @author Miya,2012-8-23,上午11:26:41,MyAlertDialog */ package com.example.myalertdialog; import java.util.ArrayList; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MyAdapter extends BaseAdapter { Context context; ArrayList<Person> list; private LayoutInflater inflater; public MyAdapter(Context context,ArrayList list){ this.context = context; this.list = list; inflater = LayoutInflater.from(context); } @Override public int getCount() { return list.size(); } @Override public Person getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { Holder holder; if(convertView==null){ holder = new Holder(); convertView = inflater.inflate(R.layout.item_listview, null); holder.name = (TextView) convertView.findViewById(R.id.item_name); holder.birth = (TextView) convertView.findViewById(R.id.item_birth); holder.itembtn = (Button) convertView.findViewById(R.id.item_btn); convertView.setTag(holder); }else{ holder = (Holder) convertView.getTag(); } holder.name.setText(list.get(position).name); holder.birth.setText(list.get(position).birth); holder.itembtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, list.get(position).name+"的生日是:"+list.get(position).birth, Toast.LENGTH_LONG).show(); } }); return convertView; } protected class Holder{ TextView name; TextView birth; Button itembtn; } }
四:萬事俱備,只欠東風!
我們要在actionAlertDialog()方法里面,實現我們的彈出效果。
protected void actionAlertDialog(){ ArrayList<Person> list = initData(); AlertDialog.Builder builder; AlertDialog alertDialog; // Context context = getApplicationContext(); LayoutInflater inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.myview, (ViewGroup)findViewById(R.id.layout_myview)); ListView myListView = (ListView) layout.findViewById(R.id.mylistview); MyAdapter adapter = new MyAdapter(context, list); myListView.setAdapter(adapter); builder = new AlertDialog.Builder(context); builder.setView(layout); alertDialog = builder.create(); alertDialog.show(); } protected ArrayList<Person> initData(){ ArrayList<Person> list = new ArrayList<Person>(); Person p; for(int i=0;i<10;i++){ p = new Person(); p.name = "小寶"+i; p.birth = "2012-8-23"; list.add(p); } return list; }
來看下效果吧!(丑了些,因為偶的主要目的是為了彈出自定義listView)
//////////////////////////////////////////////////////////////////////////