0

我有一个 ListView,其中每一行都有三个 TextView。出于某种原因,当我滚动浏览 ListView 时,我无法单击某些行。它似乎没有任何特定的模式。我最初认为这是一个焦点问题,所以我添加了一些语句以从 TextViews 中删除可点击性和焦点,但这并没有解决它。这是我的代码的相关部分:

questionsArrayAdapter = new ArrayAdapter<String>(this, R.id.number, questionsArrayList) {
            public View getView(int position, View convertView, ViewGroup parent) {
                View row = convertView;

                LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                if (row == null) {
                    // ROW INFLATION
                    row = inflater.inflate(R.layout.questionlistitem, parent, false);
                }
                TextView number = (TextView) row.findViewById(R.id.number);

                TextView answer = (TextView) row.findViewById(R.id.answer);
                TextView section = (TextView) row.findViewById(R.id.section);

                number.setFocusable(false);
                number.setClickable(false);

                answer.setFocusable(false);
                answer.setFocusable(false);

                section.setFocusable(false);
                section.setClickable(false);

这是 questionlistitem.xml:

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

    <TextView
        android:id="@+id/number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dip"
        android:gravity="center_vertical"
        android:minHeight="?android:attr/listPreferredItemHeightSmall"
        android:textAppearance="?android:attr/textAppearanceListItemSmall"
        android:visible="false" />

    <TextView
        android:id="@+id/answer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:layout_marginRight="5dip"
        android:minHeight="?android:attr/listPreferredItemHeightSmall"
        android:paddingEnd="10dip"
        android:paddingStart="6dip"
        android:textAppearance="?android:attr/textAppearanceListItemSmall" /> 

    <TextView
        android:id="@+id/section"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:minHeight="?android:attr/listPreferredItemHeightSmall"
        android:textAppearance="?android:attr/textAppearanceListItemSmall"
        android:visible="true" />

</LinearLayout>

这是我的标准听众:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    System.out.println("got clicked");

}

有谁知道是什么问题?

4

1 回答 1

0

我认为您认为这是一个TextViews将焦点从点击事件上移开的问题,您走在正确的轨道上。 我发现这个讨论可能是作为源错误报告提交的相同问题,但是这是几年前的事了,官方的说法似乎是“按预期工作”。在链接处,两个提议的解决方案似乎是在 xml 中使用android:focusable="false"您的属性TextViews(不确定这是否等同于以编程方式执行,正如您所尝试的那样)或setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);convertView它返回之前调用。

可能导致问题的其他因素是您TextViews在 xml 文件中的排列方式。水平的孩子LinearLayout通常不应该有layout_widthmatch_parent 或 fill_parent。这会导致这些视图扩展以填充父视图的长度,可能会重叠它们的兄弟视图,并可能在视觉上以及尝试与子视图交互/单击时引起怪异。您可能需要考虑使用该layout_weight属性,或者将父级设为 a RelativeLayout,这样您就可以更好地控制视图的位置。

于 2013-07-22T15:00:30.447 回答