自定义二级联动

来源:互联网 发布:淘宝鞋子质量好的店铺 编辑:程序博客网 时间:2024/05/17 10:25


布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity" >    <ListView        android:id="@+id/lv_left"        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="1" >    </ListView>    <ListView        android:id="@+id/lv_right"        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="2" >    </ListView></LinearLayout>


控件内部逻辑

 

package com.example.defindcontroler;import java.util.Map;import java.util.Set;import android.content.Context;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;public class Er extends LinearLayout { Context mContext; private View myView; private ListView lv_left; private ListView lv_right; private Map<String, String[]> mMap; private MyAdapter myAdapter; private RightItemClickListener mRightItemClickListener; private String mLeftResult; private String mRightResult; private String[] rightDatas; private String[] leftDatas; private MyAdapter myRightAdapter; public Er(Context context) {  this(context, null); } public Er(Context context, AttributeSet attrs) {  super(context, attrs);  mContext = context;  /* 先让自定义联动不可见 */  this.setVisibility(View.INVISIBLE); } private void initView() {  /* 为左边listview设置内容和适配 */  myAdapter = new MyAdapter();  leftDatas = mMap.keySet().toArray(new String[0]);  myAdapter.setAdapterData(leftDatas);  lv_left.setAdapter(myAdapter);  /* 为右边listview设置内容和适配 */  myRightAdapter = new MyAdapter();  rightDatas = mMap.get(leftDatas[0]);  myRightAdapter.setAdapterData(rightDatas);  lv_right.setAdapter(myRightAdapter);  /* 为左边listview设置点击事件 */  lv_left.setOnItemClickListener(new OnItemClickListener() {   @Override   public void onItemClick(AdapterView<?> parent, View view,     int position, long id) {    mLeftResult = leftDatas[position];    /* 根据左边listview的点击结果设置右边listview的内容 */    rightDatas = mMap.get(mLeftResult);    myRightAdapter.setAdapterData(rightDatas);    lv_right.setAdapter(myRightAdapter);    /* 设置右边listview的点击事件 这里调用自定义的事件 */    lv_right.setOnItemClickListener(new OnItemClickListener() {     @Override     public void onItemClick(AdapterView<?> parent, View view,       int position, long id) {      mRightResult = rightDatas[position];      /* 调用setOnRightItemClickListener所设置的事件 */      mRightItemClickListener.onItemClick();     }    });   }  }); } private void initData() {  myView = LayoutInflater.from(mContext).inflate(R.layout.activity_er,    this);  lv_left = (ListView) myView.findViewById(R.id.lv_left);  lv_right = (ListView) myView.findViewById(R.id.lv_right); } public interface RightItemClickListener {  void onItemClick(); } /**  *   * 为右侧的listview设置点击事件  */ public void setOnRightItemClickListener(   RightItemClickListener rightItemClickListener) {  mRightItemClickListener = rightItemClickListener; }  /**  * 为联动设置数据  *   * @param map  *           需要显示的内容 key 为左边的内容 value是右边要显示的内容  *   * */ public void setData(Map<String, String[]> map) {  mMap = map;  initData();  initView(); } /**  * 得到点击结果  *   * @return 左边点击内容+右边点击内容  *   *   * */ public String getResult() {  return mLeftResult + mRightResult; } public class MyAdapter extends BaseAdapter {  String[] mItemArr;  public void setAdapterData(String[] itemSet) {   mItemArr = itemSet;  }  @Override  public int getCount() {   // TODO Auto-generated method stub   return mItemArr.length;  }  @Override  public Object getItem(int position) {   // TODO Auto-generated method stub   return null;  }  @Override  public long getItemId(int position) {   // TODO Auto-generated method stub   return position;  }  @Override  public View getView(int position, View convertView, ViewGroup parent) {   TextView textView = new TextView(mContext);   textView.setText(mItemArr[position]);   return textView;  } }}


 剩下的下吧!

点击打开链接
0 0
原创粉丝点击