【问题标题】:Android ListView setOnItemClickListener not workingAndroid ListView setOnItemClickListener 不起作用
【发布时间】:2013-08-13 16:27:09
【问题描述】:

我正在尝试使用 TextViews 制作一个 ListView,我希望每个 textview 都能够被点击,并根据它的位置拉出一个 Fragment。但是,itemOnClickListener 似乎甚至没有被调用。

        mDrawerList = (ListView) findViewById(R.id.devices_drawer);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList.setAdapter(new ArrayAdapter<String>(this,
            R.layout.drawer_list_item, drawerInfo));
    mDrawerList.setItemsCanFocus(false);
    mDrawerList.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                final int pos, long id) {
            Log.d(TAG, "CLICKED " + pos);
            selectDevice(pos);
        }
    });

这是列表项的 xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/deviceText"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

列表视图xml文件:

<android.support.v4.widget.DrawerLayout     xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ListView
    android:id="@+id/devices_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="left"
    android:background="#111"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp" />

<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</android.support.v4.widget.DrawerLayout>

【问题讨论】:

  • 发布包含ListView...的xml文件...
  • @Shajeel Afzal 好的,我把它贴在上面了。
  • 我认为您应该在android:layout_width 中指定match_parent 而不是240dp,请问您为什么要这样做?

标签: java android xml listview drawer


【解决方案1】:

这是你的整个 xml 抽屉(我想你尝试做一个导航抽屉)?如果您有父布局,请检查android:descendantFocusability="blocksDescendants",否则您必须将 textview 包装在布局中(如果您没有复杂的项目 UI,LinearLayout 就足够了)。 new OnItemClickListenerAdapterView.OnItemClickListerner

(一个很好的操作方法http://www.vogella.com/articles/AndroidActionBar/article.html#actionbar_navigation_drawer

【讨论】:

  • @JordanBit 嘿,我改变了我的 list_item.xml,看看上面。
  • 另外,我已经稍微更改了我的代码来代表您的教程。现在,当我创建 ArrayAdapter 时,它说我需要给它一个 TextView 资源 ID,但我是...` mDrawerList.setAdapter(new ArrayAdapter(this, R.layout.fragment_layout, R.id.txtPls,抽屉信息)); `
  • 我试图理解为什么它不起作用。当您尝试不使用 TextView 参数时会发生什么?
  • @JordinBit 我在哪里放 'android:descendantFocusability...' 哪个 xml 块?
  • 我试着只给它布局,而不是它说的文本视图:08-14 12:13:19.973: E/AndroidRuntime(3571): java.lang.IllegalStateException: ArrayAdapter requires the resource成为 TextView 的 ID
【解决方案2】:

您使用mDrawerList.setItemsCanFocus(false); 有什么原因吗?您的项目布局中没有任何可聚焦的项目,因此删除该调用是安全的。之后应该可以正常工作了。

【讨论】:

  • 好的,谢谢。但是我遇到了一个新问题。我已经将纯文本视图更改为包装在线性布局中的 TextView,现在它说我需要一个 TextViewID,当我创建数组适配器时。 mDrawerList.setAdapter(new ArrayAdapter(this, R.layout.fragment_layout, R.id.txtPls,drawerInfo));
  • 任何更多的帮助都会有所帮助。
  • 嗯,有什么问题?您已经有了上面代码中的 id:@+id/deviceText。另外,new ArrayAdapter&lt;String&gt;(this, R.layout.fragment_layout fragment_layout?在您的原始帖子中,它曾经是 drawer_list_item
【解决方案3】:

还要检查您是否在列表行项目中使用 Button,它会覆盖您的列表项目点击事件

【讨论】:

    【解决方案4】:

    对于列表中的列表项.. 您必须设置以下属性

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多