我只是在编程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,但没有一个工作......
谢谢!
丹尼尔
答案 0 :(得分:0)
您正在使用CHOICE_MODE_SINGLE
告诉ListView您希望点击更改项目的选择而不仅仅是注册点击事件。
如果这是您想要的,那么您的列表项需要实现Checkable界面并使用状态选择器更改显示。
否则您可以完全删除lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
行