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?