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

我们大家在做项目的时候,时常会遇到在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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值