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
EditTextin the first row and then scroll down theListView, randomEditTextsfrom other rows will have focus. It seems to be that the nextEditTextafter 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, theEditTextwill 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 theEditTextloses focus and I have to click theEditTextagain.Even though I've set the
RatingBartofocusable="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.
These two steps resolved a similar issue I had (EditText on a row within ListView + funny keyboard behavior).
- Add android:windowSoftInputMode="adjustPan" attribute into AndroidManifest.xml file on the activity where the ListView is presented.
- Add android:descendantFocusability="afterDescendants" attribute onto the ListView itself.
This is the actual example:
AndroidManifest.xml
<activity
android:name=".SubscriptionListActivity"
android:windowSoftInputMode="adjustPan"
android:label="@string/title_activity_subscriptions" >
</activity>
layout.xml file
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="afterDescendants"
android:id="@+id/subscriptionList" />
I tested it on Samsung Galaxy S3 and it works fine with Samsung as well as SwiftKey keyboards.
i have some issue i solved just commenting this line
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
来源:https://stackoverflow.com/questions/3468765/buggy-listview-makes-me-sad