Buggy ListView让我难过

我有一个ListView ,我已经在单独的XML文件中定义每个项目的布局。 在这个文件中,我包含了一个RatingBar和一个EditText

我已经以编程方式在此ListView创建了7-8个项目。 当我滚动浏览它们时,它看起来很麻烦。 这里有些例子:

  • 如果我将焦点设置为第一行中的EditText ,然后向下滚动ListView ,则其他行中的随机EditTexts将具有焦点。 它似乎是在聚焦的人消失后的下一个EditText获得焦点。 也许这是故意的,但作为一个用户,这似乎很奇怪。

  • 如果我将焦点设置为EditText ,接收虚拟键盘,输入内容,然后单击虚拟键盘上的“完成”按钮,一旦虚拟键盘消失, EditText将立即清空。

  • 有时,当我点击一个EditText ,接收一个虚拟键盘并开始输入字母时,只要我输入字母,这些字母就会消失。

  • 当我点击EditText ,虚拟键盘显示自己,但EditText失去焦点,我不得不再次点击EditText

  • 即使我已将RatingBar设置为RatingBar focusable="false" ,但如果我移动滚轮,它仍然会抓住焦点。

  • 我的一个问题是,当我在虚拟键盘中输入一个字符时,所有可见的列表项都被重绘(因为EditText的文本被设置为一些数据,这些数据是空的,它会被清除。我不明白为什么Android每次我输入一个字符都会决定重画列表。

    这里是我用来绘制它们的XML。 他们是白色的气泡,灰色边框,一些文字, RatingBarEditText里面:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="10dip"
        android:paddingBottom="10dip"
        android:paddingLeft="15dip"
        android:paddingRight="15dip"
        >
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="2dip"
            android:background="@drawable/shape_outer">
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="2dip"
                android:background="@drawable/shape_inner">
                        <TextView
                                android:id="@+id/rating_category"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:textColor="@color/dark_gray"
                                android:textStyle="bold"
                                android:layout_marginBottom="10dip" />
                            <RatingBar 
                                android:id="@+id/rating_rating"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:numStars="5"
                                android:rating="0"
                                android:stepSize="1"
                                android:focusable="false"
                                android:clickable="false"
                                />
                            <EditText 
                                android:id="@+id/rating_text"
                                android:layout_width="fill_parent"
                                android:layout_height="wrap_content"
                                android:layout_column="1"
                                android:padding="6dip"
                                android:textColor="#000000"
                                android:gravity="left|top"
                                android:lines="3"
                                android:hint="Comment"
                                android:imeOptions="actionDone" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
    

    这听起来像ListViews不能很好地处理EditTexts。 我已经做了一些研究,共识似乎是“不这样做”。 所以我采取的是创建一个简单的布局文件,它是一个带有LinearLayout的ScrollView。 在我的onCreate方法中,我膨胀了我用于列表项目的视图并将其添加到LinearLayout。 我还将视图添加到ArrayList中,以便稍后将数据保存在每个视图中。

    这听起来合理吗?


    那么,把它添加到清单中的活动中...

    android:windowSoftInputMode="adjustPan"
    

    例...

    <activity android:name=".mapview.AddParkingLotActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan"/>
    

    我遇到了同样的问题。 当键盘出现时,LisView中的EditText失去焦点,所以我放置ListView项目的getView

    final EditText editInput = (EditText)convertView.findViewById(R.id.edit_input);
    editInput.requestFocusFromTouch();
    

    而这项工作对我来说。

    链接地址: http://www.djcxy.com/p/24225.html

    上一篇: Buggy ListView makes me sad

    下一篇: Set Focus on EditText