编写从OnItemClickListener获取的视图的侦听器

时间:2017-12-07 08:02:56

标签: android listview listener onitemclicklistener

不同类中的列表视图和自定义适配器。
自定义适配器有2个textViews

在OnItemClickListener中,我为textviews创建了监听器。
TextView监听器有时会工作一段时间不工作。

listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                final int pos, final long id) {

            TextView tv1 = (TextView) view.findViewById(R.id.tv1);

            tv1.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    Toast.makeText(act, "tv1 clicked", 300).show();
                }
            });

            TextView tv2 = (TextView) view.findViewById(R.id.tv2);

            tv2.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    Toast.makeText(act, "tv2 clicked", 300).show();
                }
            });

            // listViewListeners(parent, view, pos, id);
        }
    });

1 个答案:

答案 0 :(得分:1)

您正在尝试在单击父级时在子视图上注册click事件,因此第一次它将无法工作,因为父级将从用户触摸,但基于子元素提升和事件侦听器,它需要单击来自孩子。

避免使用界面

interface ClickListener{
  void tvOneClicked(int position);
  void tvTwoClicked(int position);
}

并且从活动中调用适配器传递接口,如

中所示
adapter = new CustomAdapter(this,some_layout,somedata, new ClickListener(){
     @Override
     public void tvOneClicked(int position){
        //Toast.makeText(act, "tv1 clicked", 300).show(); 
     }

     @Override
     public void tvOneClicked(int position){
        //Toast.makeText(act, "tv2 clicked", 300).show(); 
     }});

在您的Adapter中,当您的任何activity时,请使用此号码致电textview 点击

private ClickListener clickListener;
 public CustomAdapter(Activity act,int layout,List<> data, ClickListener listener){ 
    this.clickListener = listener;
 }

 public void getView(...){

   ...
    tv1.setOnClickListener(new OnClickListener() {
                @override
                public void onClick(View v) {
                     clickListener.onOneClicked(position);
                }
            });
            tv2.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    clickListener.onTwoClicked(position);
                }
            });
   ...
  }