首页 > 解决方案 > Android ListView ItemClickListener 无法与 Horizo​​ntalScrollView 一起正常工作

问题描述

我的 OnItemClickListener 无法正常工作。我有一个带有 ListView 的自定义对话框布局。ListView 将 TextViews 保存为 Item。TextView 应该是可滚动的,所以我将 TextView 放在 Horizo​​ntalScrollView 中,因为我的文本会变长。

但现在的问题是,只有当我删除我的 ScrollView 时才会调用 OnItemClickListener。

这是我的 ListView 项目 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <HorizontalScrollView android:layout_width="fill_parent"
        android:id="@+id/scrollView"
        android:layout_height="fill_parent"
        android:scrollbars="none">

        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:scrollHorizontally="true"
            android:textColor="#fff"
            android:singleLine="true"
            android:paddingLeft="15dp"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:gravity="center_vertical"
            />
    </HorizontalScrollView>

    <View
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:background="#000"/>
</LinearLayout>

这是我设置 On Item click Listener 的方法:

ListView listView = builder.findViewById(R.id.listviewDialog);
        listView.setClickable(true);

        ArrayAdapter arrayAdapter = new ArrayAdapter(ContextActivity, R.layout.list_item2, R.id.tv, aListe);

        listView.setAdapter(arrayAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                //
            }
        });

当我将以下属性添加到我的 Item XML 的最顶部布局时,它会起作用:

android:descendantFocusability="blocksDescendants" 

但是只有当我不点击文本时,我的点击事件才会触发。

谁能帮我?

编辑:

解决方案从 W0rmH0le 发布到此处。基本上,我需要 EditText,而不是 TextView: Android 上 textview 上的水平滚动?

EDIT2:即使使用可聚焦的错误等复选框,在项目单击时仍会损坏,但 TextView 和 EditText 无效。所以现在我的 EditText 得到了点击监听器,而不是 listView

标签: androidandroid-listviewandroid-dialog

解决方案


使用android:scrollHorizontally="true"和 EditText 代替 TextView

尝试这样的事情:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:scrollHorizontally="true"
            android:textColor="#fff"
            android:singleLine="true"
            android:paddingLeft="15dp"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:gravity="center_vertical"/
            android:scrollHorizontally="true">
    <View
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:background="#000"/>
</LinearLayout >

推荐阅读