ListView onItemClick无法在Activity中工作

时间:2012-12-24 10:56:42

标签: android listview onitemclicklistener

当我在具有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();
        }
    }
});

搜索解决方案后,我最终在适配器

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

这很有效。但为什么这么奇怪的行为。它为什么不按照应有的方式工作。

谢谢

5 个答案:

答案 0 :(得分:5)

  

usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

此处您使用了View Adapter View Custom Adapter,这是View的父类。这就是为什么它不起作用。相反,您应该使用Custom Adapter的{​​{1}}。

此处的

getView()功能可帮助您将家长Adpater View的视图转换为Custom Adapter视图。

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

usersList.setOnItemClickListener(new CustomAdapterView.OnItemClickListener() {

usersList.setOnItemClickListener(new OnItemClickListener() {

这两个选项都可行。

答案 1 :(得分: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

答案 2 :(得分:1)

它会起作用

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

答案 3 :(得分:0)

如果您有自定义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();
        }
    }
});

答案 4 :(得分:-1)

在Activity类中尝试使用此行。

usersList.setOnItemClickListener(new OnItemClickListener() {

此行仅使用Activity类中的适配器,这不起作用。我认为不确定

usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {