雙listview實現兩級選擇的 dialog
阿新 • • 發佈:2018-12-20
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 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>
/** * 帶有兩個並列的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();
以下是下載的地址