1. 程式人生 > >雙listview實現兩級選擇的 dialog

雙listview實現兩級選擇的 dialog

1.對話方塊的佈局檔案

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/shape_rectangular_white_radius"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/tv_title1"
            style="@style/dialog_textview"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:text="型別"/>

        <TextView
            android:id="@+id/tv_title2"
            style="@style/dialog_textview"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:text="詳情" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <ListView
            android:id="@+id/lv_list1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:scrollbars="none"
            android:background="@drawable/shape_rectangular_gray_bottom_left"
            android:divider="#C6C6C6" >
        </ListView>

        <ListView
            android:id="@+id/lv_list2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/shape_rectangular_gray_bottom_right"
            android:scrollbars="none"
            android:divider="#C6C6C6" >
        </ListView>
    </LinearLayout>

</LinearLayout>


其中的字型的style如下

<style name="publish_dialog_textview">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">50dp</item>
        <item name="android:gravity">center</item>
        <item name="android:textColor">#333333</item>
    </style>


dialog 類相對

/**
 * 帶有兩個並列的listview的  dialog
 * @author wtw
 * 2016-1-14下午2:05:49
 */
public class DoubleListDialog extends Dialog{

	private Context context;
	private TextView mTvTitle1;//標題一
	private TextView mTvTitle2;//標題二
	private ListView mLvList1;
	private ListView mLvList2;
	public static View partOne;//listview的item
	
	private ArrayList<String> listData1;//list資料一
	private ArrayList<ArrayList<String>> AlllistData2;//list資料二
	private ArrayList<String> listData2=new ArrayList<String>();//list資料二
	private String data1;//選擇的資料一
	private String data2;//選擇的資料二
	
	private CallBack callBack;//點選後的資料返回
	
	public DoubleListDialog(Context context,ArrayList<String> listData1,ArrayList<ArrayList<String>> AlllistData2,CallBack callBack) {
		super(context,R.style.publish_dialog);
		this.context=context;
		this.listData1=listData1;
		this.AlllistData2=AlllistData2;
		this.callBack=callBack;
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		super.onCreate(savedInstanceState);
		initView();
	}
	
	private void initView(){
		data1=listData1.get(0);
		LayoutInflater inflater = LayoutInflater.from(context);
		View view = inflater.inflate(R.layout.dialog_double_list, null);
		setContentView(view);
		
		//設定dialog的大小
		Window dialogWindow = getWindow();
		WindowManager.LayoutParams lp = dialogWindow.getAttributes();
		DisplayMetrics d = context.getResources().getDisplayMetrics(); // 獲取螢幕寬、高用
		lp.width = (int) (d.widthPixels * 0.9); // 寬度設定為螢幕寬度的 90%
		dialogWindow.setAttributes(lp);
		
		mTvTitle1=(TextView)view.findViewById(R.id.tv_title1);
		mTvTitle2=(TextView)view.findViewById(R.id.tv_title2);
		
		mLvList1=(ListView)view.findViewById(R.id.lv_list1);
		mLvList2=(ListView)view.findViewById(R.id.lv_list2);
		DoubleListDialogAdapter adapter1 =new DoubleListDialogAdapter(context, listData1);
		mLvList1.setAdapter(adapter1);
		listData2.addAll(AlllistData2.get(0));
		final DoubleListDialogAdapter2 adapter2 =new DoubleListDialogAdapter2(context, listData2);
		mLvList2.setAdapter(adapter2);
		mLvList1.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub
				if(partOne!=null){
					partOne.setBackgroundColor(context.getResources().getColor(R.color.white));
				}
				partOne=arg1;
				partOne.setBackgroundColor(context.getResources().getColor(R.color.dialog_list));
				data1=listData1.get(arg2);
				listData2.clear();
				listData2.addAll(AlllistData2.get(arg2));
				adapter2.notifyDataSetChanged();
			}
		});
		mLvList2.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub
				data2=listData2.get(arg2);
				callBack.clickResult(data1,(data2.equals("全部")?"":data2));
			}
		});
	}
	
	public interface CallBack{
		public void clickResult(String data1, String data2);
	}

}

在其他介面的呼叫如下


ArrayList<String> listData1=new ArrayList<String>();
		listData1.add("蔬菜");
		listData1.add("水果");
		listData1.add("肉");
		ArrayList<ArrayList<String>> AlllistData2=new ArrayList<ArrayList<String>>();
		ArrayList<String> listData2=new ArrayList<String>();
		listData2.add("空心菜");
		listData2.add("菜花");
		listData2.add("大白菜");
		AlllistData2.add(listData2);
		listData2=new ArrayList<String>();
		listData2.add("蘋果");
		listData2.add("芒果");
		AlllistData2.add(listData2);
		listData2=new ArrayList<String>();
		listData2.add("雞肉");
		listData2.add("牛肉");
		AlllistData2.add(listData2);
		dialog=new DoubleListDialog(
				getActivity(), 
				listData1, 
				AlllistData2, 
				new CallBack() {
					
					@Override
					public void clickResult(String data1,String data2) {
						
					}
				});
		dialog.show();


以下是效果圖 




以下是下載的地址

http://download.csdn.net/detail/shuang__zi/9624028