我有一个列表视图,其中包含一些标题来分隔列表项。这个想法是让它的行为类似于 jellybean 中的联系人应用程序,并带有字母首字母的部分标题。我用来执行此操作的方法是在我的 list_item.xml 中有一个额外的文本视图,我根据下一个字母是否需要新的分隔符来动态隐藏或显示。
问题是,无论何时添加节标题,它都可以与下一个客户端条目一起单击。所以它会像
A
_____
Ally
用户可以选择整个列表单元格。我只想选择 Ally 并且无法选择标题。我怎样才能做到这一点?
我有一个列表视图,其中包含一些标题来分隔列表项。这个想法是让它的行为类似于 jellybean 中的联系人应用程序,并带有字母首字母的部分标题。我用来执行此操作的方法是在我的 list_item.xml 中有一个额外的文本视图,我根据下一个字母是否需要新的分隔符来动态隐藏或显示。
问题是,无论何时添加节标题,它都可以与下一个客户端条目一起单击。所以它会像
A
_____
Ally
用户可以选择整个列表单元格。我只想选择 Ally 并且无法选择标题。我怎样才能做到这一点?
这看起来像您要实现的目标:http: //blog.peterkuterna.net/2011/05/pinned-header-listview-as-in-contacts.html
自定义PinnedHeaderListView
可以从这里下载(这是他在博客中写的 Devoxx 2010 Schedule 应用程序)
解决方案 1,您可以使用惊人的列表视图库。这对我有用。你可以参考它的代码,它不是很长。
解决方案2,在普通列表视图中添加标题,如下所示:
itemheader.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/daily_title"
android:textColor="#545454"
android:text="04/16"
android:paddingLeft="10dp"
android:gravity="center_vertical"
android:textSize="10sp"
android:id="@+id/header"/>
item_rows.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/ArticleList.item"
android:background="@drawable/list_item_bg"
android:orientation="vertical">
<include
android:layout_width="fill_parent"
android:layout_height="24dp"
layout="@layout/itemheader" />
那么你只需要注意哪一行需要显示标题。
实现这一点的一种方法是使用ArrayAdapter
实现SectionIndexer的自定义。可以在这里找到一个不错的简单教程:
http://twistbyte.com/tutorial/android-listview-with-fast-scroll-and-section-index
这是我如何看待问题的。
您已经有这样的设置:
一个 _盟友
- 单击“A”(或其右侧区域)不应触发 ListView 的“onItemClick”事件。
- 单击“Ally”(或其右侧区域)应触发 ListView 的“onItemClick”事件。
有一个简单的解决方法:
必须消耗对“A”的点击。我想您的SomeAdapter.getView()
方法中有类似于以下内容的设置:
if (someCondition) {
headerTextView.setVisibility(View.VISIBLE);
headerTextView.setText("Hello");
} else {
headerTextView.setVisibility(View.GONE);
}
由于headerTextView
没有对其进行OnClickListener
设置,因此单击事件将传递给 ListView 的OnItemClickListener
。要阻止这种情况发生,请headerTextView
在将其可见性设置为时添加一个 OnClickListener VISIBLE
。
if (someCondition) {
headerTextView.setVisibility(View.VISIBLE);
headerTextView.setText("Hello");
headerTextView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.i("Header", "TextView Header was clicked");
}
});
} else {
headerTextView.setVisibility(View.GONE);
}
为了您的目标,您可以onClick(View v)
空着身子离开。
警告:标题(在您的示例中给出)是一个字符长。您将需要layout_width
提供match_parent
. 这样,它的外观不会受到影响,但文本右侧的可见(空白)区域将被填充headerTextView
。在此区域内单击不会触发 ListView 的onItemClick()
。而且,点击“盟友”或其他地方会触发它。