Buggy ListView makes me sad

I have a ListView where I've defined the layout of each item in a separate XML file. In this file I've included a RatingBar and an EditText .

I've programmatically created 7-8 items in this ListView . When I scroll through them, it seems to be quite buggy. Here are some examples:

  • If I set focus to the EditText in the first row and then scroll down the ListView , random EditTexts from other rows will have focus. It seems to be that the next EditText after the focused one disappears receives focus. Perhaps this is intentional, but, as a user, it seems very weird.

  • If I set focus to an EditText , receive a virtual keyboard, type something, and click the "Done" button on my virtual keyboard, the EditText will empty as soon as the virtual keyboard disappears.

  • Sometimes, when I click an EditText , receive a virtual keyboard and start typing letters, the letters will disappear as soon as I type them.

  • When I click on an EditText , the virtual keyboard shows itself, but the EditText loses focus and I have to click the EditText again.

  • Even though I've set the RatingBar to focusable="false" , if I move my scrollwheel, it still grabs focus.

  • One of my problems is all the visible list items get redrawn when I type a character in the virtual keyboard (and since the text of the EditText is set to some data, which is empty, it gets cleared. I don't understand why Android would decide to redraw the list every time I type a character.

    Here is the XML I'm using to draw them. They are white bubbles, with a gray boarder, and some text, a RatingBar and an EditText inside:

    <?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>
    

    It sounds like ListViews aren't able to handle EditTexts well. I've done some research and the consensus seems to be "don't do that." So what I've resorted to is creating a simple layout file which is a ScrollView with a LinearLayout inside. In my onCreate method, I inflate the View I was using for my list item and add it to the LinearLayout. I'm also adding the View to an ArrayList so I can save the data in each View later on.

    Does this sound reasonable?


    Well,add this to your activity in manifest...

    android:windowSoftInputMode="adjustPan"
    

    Example...

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

    I was having the same problem. My EditText inside of LisView was losing focus when the keyboard appears, so on getView from the ListView item I put

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

    And this work for me.

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

    上一篇: androidviewviewview里面的cardview onTouch监听器冲突/敏感

    下一篇: Buggy ListView让我难过