在适配器中点击监听给activity中的控件赋值,采用接口回调的方式

来源:互联网 发布:java线程的优先级 编辑:程序博客网 时间:2024/06/04 22:54

我们大家在做项目的时候,时常会遇到在adapter中操作activity中的控件
或者在activity中想操作adapter中的控件这种情况,下面用接口回调来实现此功能。

首先在adapter中定义接口,调用监听方法

private static final String TAG = ListViewDemoAdapter.class.getSimpleName();      /**      * 上下文      */      private Context mContext;      /**      * LayoutInflater      */      private LayoutInflater mInflater;      private List<String> datas;      public ListViewDemoAdapter(Context context,List<String> list){          this.mContext = context;          this.datas = list;          this.mInflater = LayoutInflater.from(context);      }      @Override      public int getCount() {          return datas.size();      }      @Override      public String getItem(int position) {          return datas.get(position);      }      @Override      public long getItemId(int position) {          return position;      }      @Override      public View getView(int position, View convertView, ViewGroup parent) {          ViewHolder holder = null;          if(convertView == null){              holder = new ViewHolder();              convertView = mInflater.inflate(R.layout.listitem,null);              holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);              convertView.setTag(holder);          }else{              holder = (ViewHolder) convertView.getTag();          }          holder.tv_name.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View v) {                  Log.d(TAG,"setOnClickListener-->onClick...");                  //回调传递点击的view                      if(mItemOnClickListener!=null){                     mItemOnClickListener.itemOnClickListener(v);                      }            }          });          return convertView;      }      private ItemOnClickListener mItemOnClickListener;      public void setmItemOnClickListener(ItemOnClickListener listener){          Log.d(TAG,"setmItemOnClickListener...");          this.mItemOnClickListener = listener;      }      public interface ItemOnClickListener{          /**          * 传递点击的view          * @param view          */          public void itemOnClickListener(View view);      }      public class ViewHolder{          public TextView tv_name;      }  

下面是activity中的代码

public class MainActivity extends AppCompatActivity {      private static final String TAG = MainActivity.class.getSimpleName();      /**      * listview      */      private ListView mLvDemo;      private List<String> list = new ArrayList<String>();      private  ListViewDemoAdapter mAdapter;      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          //初始化view          initView();          //初始化数据          initData();      }      /**      * 初始化view      * @author crystal      * @date 2015-9-4 22:24      */      private void initView(){          //初始化listview          mLvDemo = (ListView) findViewById(R.id.lv_demo);          mAdapter = new ListViewDemoAdapter(MainActivity.this,list);          mLvDemo.setAdapter(mAdapter);          //获取点击的view子控件          mAdapter.setmItemOnClickListener(new ListViewDemoAdapter.ItemOnClickListener() {              /**              *  点击的view子控件              * @param view view子控件              */              @Override              public void itemOnClickListener(View view) {                  Log.d(TAG, "itemOnClickListener view...");                  TextView tvName = (TextView)view;                  //提示点击的子控件的文本                  Toast.makeText(MainActivity.this,tvName.getText().toString(),Toast.LENGTH_LONG).show();              }          });      }      /**      * 初始化数据      * @author crystal      * @date 2015-9-4 22:51      */      private void initData(){          list.add("crystal");          list.add("jack");          list.add("tom");          list.add("rose");          list.add("lora");          list.add("tony");          mAdapter.notifyDataSetChanged(); //更新数据      }  }

这样就实现了在activity中调用adapter控件监听的方法,实现adapter与activity之间的通信。

阅读全文
0 0
原创粉丝点击