【问题标题】:ListView onItemClick not working in the ActivityListView onItemClick 在活动中不起作用
【发布时间】:2012-12-24 10:56:41
【问题描述】:

当我在具有 ListView 的活动中使用它时,它不起作用。

usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            ong arg3) {
    try {
        Intent intent = new Intent(UsersListActivity.this,
                UserActivity.class);
        startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

在搜索解决方案后,我最终在 Adapter

getView() 中完成了它
convertView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            ong arg3) {
    try {
        Intent intent = new Intent(mActivity,
                UserActivity.class);
        mActivity.startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

这行得通。但是为什么会有这种奇怪的行为。为什么它没有按应有的方式工作。

谢谢

【问题讨论】:

  • 你在使用自定义适配器吗?
  • 是的。我对项目中的几乎所有 ListView 都使用 CustomAdapter。大约有10-12个。但我从来没有遇到过这个错误。您可能感兴趣的一件事是:我对 3 个 ListView 使用相同的父项和相同的 list_item,但使用不同的适配器,这应该不会导致任何问题,对吧?
  • 我试图在下面的回答中对这种意外行为提供一些解释。让我知道我是否在某个地方错了。

标签: android listview onitemclicklistener


【解决方案1】:

usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

这里您使用了Adapter View 中的View,这是您的Custom Adapter 的父类。这就是为什么它不起作用。相反,您应该使用Custom AdapterView

getView() 函数在这里帮助您将父视图Adpater View 转换为Custom Adapter 视图。

所以你使用两个选项中的任何一个,

usersList.setOnItemClickListener(new CustomAdapterView.OnItemClickListener() {

usersList.setOnItemClickListener(new OnItemClickListener() {

这两个选项都可能有效。

【讨论】:

  • 这看起来像。但是为什么直到现在它还在其他地方工作呢?事实上,在 3 个具有相同布局和相同 ListView 项的类似 ListView 中,1 个可以正常工作,另外 2 个不能
  • 我不认为,应该是这样。正在工作的列表视图中可能有一些不同的东西。因为如果你使用自定义适配器,你必须使用同一个适配器的视图。
  • 唯一的区别是 1 在 ListViewItem 中没有任何可点击的子项。另外 2 个有一个 Button,其 onClickListener 在 getView() 中实现。
  • 就是这样。你得到了解释。如果需要使用onClickListener,则需要使用自定义适配器的视图。
  • @Archie.bpgc:任何时候,事实上,谢谢你。之前没有考虑过,但是你的帖子让我深刻的理解了。
【解决方案2】:

我找到了这个on a blog

会出现你的自定义列表项在点击时没有响应的情况……那是什么原因,有什么解决办法呢?

这里有几个问题和解决方法:

1。场景:列表项布局包含 CheckBox

问题:OnItemClickListener 没有响应。

原因:CheckBox 默认也有自己的点击监听器来改变它的状态,它覆盖了容器 ListView。

解决方案:通过将这些属性设置为 false 来移除对 CheckBox 的关注

android:focusable="false"
android:focusableInTouchMode="false"

2。场景:随机

问题:OnItemClickListener 根本没有响应!!!!

原因:不知道..

解决方案:在代码中,只需在设置 Adapter 之前设置 OnItemClickListener。它随机工作@@!

3。场景:列表项包含 ImageButton

问题:OnItemClickListener 根本没有响应!!!!

原因:不知道!!!

解决方案:在代码中,将 ImageButton 焦点设置为false

ImageButton button = (ImageButton) convertView.findViewById(R.id.imageButton);
button.setFocusable(false);

4。场景:列表项包含 TextView

问题:OnItemClickListener 没有响应。

原因:我认为您已将此属性设置为 TextView:android:inputType=”textMultiLine”

解决方案:只需删除该属性,改用android:minLines/android:maxLines

5。场景:列表项包含一个链接到网站 URL 或任何“mailto:”东西的 TextView

问题:OnItemClickListener 没有响应。

原因:TextView 覆盖了列表项的焦点。

解决方案:只需删除 TextView 上的属性 android:autoLink

【讨论】:

    【解决方案3】:

    会有用的

    lv.setOnItemClickListener(new OnItemClickListener() {
    
    public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3) {
       // TODO Auto-generated method stub
    
         try {
           Intent intent = new Intent(mActivity, UserActivity.class);
           mActivity.startActivity(intent);
           } catch (Exception e) {
             e.printStackTrace();
          }
       }
    });
    

    【讨论】:

      【解决方案4】:

      如果您有自定义的 AdapterView,则需要引用该 AdapterView。我认为如果您引用超类适配器视图并且当您调用setAdapter() 时,您的new AdapterView.OnItemClickListener() 代码块将不会执行。

      usersList.setOnItemClickListener(new CustomAdapterView.OnItemClickListener() {
      
          public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                  ong arg3) {
          try {
              Intent intent = new Intent(UsersListActivity.this,
                      UserActivity.class);
              startActivity(intent);
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      });
      

      【讨论】:

      • 但这是我一直在使用的。从来没有引起过这样的问题。
      【解决方案5】:

      尝试在 Activity 类中使​​用此行。

      usersList.setOnItemClickListener(new OnItemClickListener() {
      

      此行仅在 Activity 类中使​​用适配器,这是行不通的。我觉得不确定

      usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {    
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-08
        • 1970-01-01
        • 2023-04-11
        • 2012-01-04
        • 2014-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多