1

我有一个列表视图,其中包含一些标题来分隔列表项。这个想法是让它的行为类似于 jellybean 中的联系人应用程序,并带有字母首字母的部分标题。我用来执行此操作的方法是在我的 list_item.xml 中有一个额外的文本视图,我根据下一个字母是否需要新的分隔符来动态隐藏或显示。

问题是,无论何时添加节标题,它都可以与下一个客户端条目一起单击。所以它会像

A
_____
Ally

用户可以选择整个列表单元格。我只想选择 Ally 并且无法选择标题。我怎样才能做到这一点?

4

4 回答 4

1

这看起来像您要实现的目标:http: //blog.peterkuterna.net/2011/05/pinned-header-listview-as-in-contacts.html

自定义PinnedHeaderListView可以从这里下载(这是他在博客中写的 Devoxx 2010 Schedule 应用程序)

于 2013-08-07T21:46:39.210 回答
1

解决方案 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" />

那么你只需要注意哪一行需要显示标题。

于 2013-08-08T05:53:32.947 回答
1

实现这一点的一种方法是使用ArrayAdapter实​​现SectionIndexer的自定义。可以在这里找到一个不错的简单教程:

http://twistbyte.com/tutorial/android-listview-with-fast-scroll-and-section-index

于 2013-08-14T09:28:51.940 回答
0

这是我如何看待问题的。

您已经有这样的设置:

一个 _盟友

  • 单击“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()。而且,点击“盟友”或其他地方会触发它。

于 2013-08-12T06:41:26.557 回答