问题
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 theListView
, randomEditTexts
from other rows will have focus. It seems to be that the nextEditText
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, theEditText
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 theEditText
loses focus and I have to click theEditText
again.Even though I\'ve set the
RatingBar
tofocusable=\"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>
回答1:
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?
回答2:
Well,add this to your activity in manifest...
android:windowSoftInputMode="adjustPan"
Example...
<activity android:name=".mapview.AddParkingLotActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan"/>
回答3:
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.
回答4:
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.
回答5:
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