Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 具有两个文本视图的不可单击的listview条目_Android - Fatal编程技术网

Android 具有两个文本视图的不可单击的listview条目

Android 具有两个文本视图的不可单击的listview条目,android,Android,我有一个列表视图,其中包含一些用于分隔列表项的标题。这样做的目的是使它的行为类似于jellybean中的contacts应用程序,其中的节头是字母的首字母。我正在使用的方法是在我的list_item.xml中有一个额外的文本视图,根据下一个字母是否需要新的分隔符动态隐藏或显示该视图 问题是,无论何时添加节标题,它都可以与下一个客户端条目一起单击。那就好像 A _____ Ally 用户可以选择整个列表单元格。我只想选择盟友,不选择标题。我如何才能做到这一点?这看起来像是您试图实现的目标: 定

我有一个列表视图,其中包含一些用于分隔列表项的标题。这样做的目的是使它的行为类似于jellybean中的contacts应用程序,其中的节头是字母的首字母。我正在使用的方法是在我的list_item.xml中有一个额外的文本视图,根据下一个字母是否需要新的分隔符动态隐藏或显示该视图

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

A
_____
Ally

用户可以选择整个列表单元格。我只想选择盟友,不选择标题。我如何才能做到这一点?

这看起来像是您试图实现的目标:


定制的
PinnedHeaderListView
可以从(他在博客中提到的是Devxx 2010 Schedule应用程序)下载解决方案1,您可以使用。这对我来说很有效。你可以参考它的代码,它不是很长

解决方案2,在普通listview中添加标题,如下所示:

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" />


然后您只需要注意哪一行需要显示标题。

以下是我对问题的看法

您已经有这样的设置:

A 联盟

  • 单击“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
。要阻止这种情况发生,请在将OnClickListener的可见性设置为可见时,将其添加到
headerTextView

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(视图v)
保留为空体


注意:标题(在您的示例中给出)只有一个字符长。您需要提供
匹配父项的文本视图(保持标题)
布局宽度
。这样,它的外观不会受到影响,但文本右侧的可见(空)区域将由
headerTextView
填充。在此区域内单击不会触发ListView的
onItemClick()
。而且,单击“Ally”或其他位置将触发它。

实现这一点的一种方法是使用一个实现的自定义
阵列适配器。
在这里可以找到一个简单的教程:


您可能需要考虑的另一种方法是使用一个视图列表,每个视图包含一个标题和一个项目列表(例如,外部列表中的每个视图将是字母,然后是联系人列表)。但是,我不确定外部列表忽略点击事件和内部列表监听这些事件的技术细节。您如何添加标题?它们总是在我的list_item.xml中定义的,但它们只是根据我是否需要在可见和消失之间切换,所以不使用
android:clickable=“false”
android:focusable=“false”
处理那些
文本视图
?我已经尝试了这两种方法,但它们都没有效果如果您想要一个不需要外部库的解决方案,那么解决方案2可能是最好的。在选择是否显示标题的相同逻辑中,只需将其替换为选择是否对不同视图进行充气即可。