OnItemClickListener不适用于ListView和TableLayout

时间:2017-02-25 21:15:33

标签: android listview

我只是在编程Android应用程序时卡在这里。

我创建了一个基于适配器(Extends BaseAdapter)的项目列表,由于项目的所需定位,它显示了TableLayout中的项目。然后,我添加了onItemClickListener,但没有任何反应......

ActivityNews.xml:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"

>

<android.support.v7.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:id="@+id/news_toolbar"
    android:elevation="4dp"
    android:background="@color/colorPrimary"
    >
</android.support.v7.widget.Toolbar>

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/news_toolbar"
    android:id="@+id/newslist"
    android:background="@color/colorBackground"


    ></ListView>

</RelativeLayout>

然后,这是news_list_view.xml

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:padding="6dp"
    android:background="@color/colorBackground"
    android:clickable="false"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:descendantFocusability="blocksDescendants"
    >
        <ImageView android:id="@+id/news_image"
            android:layout_alignParentStart="true"
            android:layout_marginEnd="6dp"
            android:layout_height="60dp"
            android:layout_width="60dp"
            android:clickable="false"
            android:focusable="false"
            android:layout_gravity="center"
            android:focusableInTouchMode="false"
            />
    <TableLayout
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:clickable="false"
        android:focusable="false"

        >
        <TableRow
            android:clickable="false"
            android:focusable="false">
    <TextView android:id="@+id/news_date"
        android:layout_marginTop="4dp"
        android:layout_marginRight="4dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/colorDate"
        android:layout_toRightOf="@id/news_image"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textIsSelectable="false"
        />

    <TextView android:id="@+id/news_type"
        android:layout_marginTop="4dp"
        android:layout_width="match_parent"
        android:layout_toRightOf="@id/news_date"
        android:layout_height="wrap_content"
        android:textColor="@color/colorSubHeadline"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textIsSelectable="false"
        />
     </TableRow>

     <TableRow
         android:clickable="false"
         android:focusable="false">
    <TextView android:id="@+id/news_headline"
        android:layout_marginTop="4dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="wrap_content"
        android:layout_below="@id/news_type"
        android:layout_height="wrap_content"
        android:textColor="@color/colorHeadline"
        android:layout_span="2"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
         android:textIsSelectable="false"/>
     </TableRow>
    </TableLayout>
</LinearLayout>

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

和NewsActivity的片段

 lv = (ListView) findViewById(R.id.newslist);
    adapter = new NewsAdapter(this);
    lv.setAdapter(adapter);
    lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(NewsActivity.this, "You Clicked ", Toast.LENGTH_SHORT).show();
        }
    });

有什么想法吗?

在研究它时,我发现了一些提示,例如在ListView下面为第一个布局设置clickable = false或descendantFocusability,但没有一个工作......

谢谢!

丹尼尔

1 个答案:

答案 0 :(得分:0)

您正在使用CHOICE_MODE_SINGLE告诉ListView您希望点击更改项目的选择而不仅仅是注册点击事件。

如果这是您想要的,那么您的列表项需要实现Checkable界面并使用状态选择器更改显示。

否则您可以完全删除lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);