【问题标题】:Write listeners for Views getting from OnItemClickListener为从 OnItemClickListener 获取的视图编写监听器
【发布时间】:2017-12-07 08:02:56
【问题描述】:

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

在 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);
        }
    });

【问题讨论】:

  • 问题是您为什么要在 onItemClick 中添加侦听器?这将无法正常工作。为什么不在自定义适配器类中添加点击监听器?
  • 不同类的List View和Custom Adapter,我的adapter需要使用多个activity。
  • 在 Adapter 的 getView() 中设置监听器。遵循自定义列表适配器教程。 “我的适配器需要使用多个活动”假设与列表项单击有关。
  • 适配器的 getView() 我已经使用了它的工作。我需要 OnItemClickListener 方法。谢谢

标签: android listview listener onitemclicklistener


【解决方案1】:

您正在尝试在单击父视图时在子视图上注册单击事件,因此它第一次不起作用,因为父视图会从用户那里获取触摸,但基于子元素提升和事件侦听器,它需要点击来自孩子。

为了避免那些使用界面

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

并且在从 Activity 调用您的适配器时,通过上面的接口,如

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 中,当您的任何textview 中使用它来调用activity 点击了

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);
                }
            });
   ...
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    相关资源
    最近更新 更多