Edit Text in ListActivity ListView loses focus whe

2019-01-11 10:06发布

问题:

I have searched and searched for an answer to this question and everything that looked like an answer has not worked so I guess I will just ask.

I have a couple of EditText boxes added to a ListView that is the basis to a ListActivity. When I set the windowSoftInputMode to adjustPan and click in an EditText it works until you click on it again and then the keyboard covers it up. When I use adjustResize it works except when the keyboard comes up the EditText loses focus and I have to tap on it again to type.

I was trying to figure out how to catch the onResize but that seems to be associated with the View and not the activity and I'm not entirely sure how to listen for it. I have also tried all sorts of focusable settings on the EditText boxes and the ListView itself (as suggested in other posts I read) that don't seem to help either.

回答1:

All you really need to do is apply this to your ListView:

XML:

android:descendantFocusability="afterDescendants"

Java:

listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);


回答2:

In my case it perfect worked with adding this like of code to manifest:

android:windowSoftInputMode="adjustPan"


回答3:

mViewHolder.editText = (EditText)convertView.findViewById(R.id.editText1);
            mViewHolder.editText.setTag(position);
            mViewHolder.editText.setTextColor(0xFF000000);
            mViewHolder.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                public void onFocusChange(View v, boolean hasFocus) {
                    if (!hasFocus) {
                        EditText et =(EditText)v.findViewById(R.id.editText1);
                        editTextArrayList.set(position,et.getText().toString().trim());
                    }
                }
            });

Hi below link may help for you http://mylearnandroid.blogspot.in/2014/06/listview-problem-while-scrolling.html



回答4:

Have you tried after you do adjustResize making sure to reset the focus to the EditText by doing something like EditText.requestFocus(); so that it has focus again and the user doesn't have to tap it again. you can use EditText.isFocused() to see if it is focused (true) or not (false) in a debugging log statement or something as well.

you might need to set the field to focusable as well using SetFocusable() but be careful because this could potentially take away the focus from the ListView itself and prevent you from being able to scroll or select things later so you will have to play around with the setting focusable and is focused stuff.



回答5:

For me a combination of the following helped me (especially number 3):

1) Add the following to the related Activity in the manifest file, this is required for your ListView to be resized to fill only the area above the softKeyboard:

android:windowSoftInputMode="adjustResize"

2) With the below the ListView will ONLY get focus only if none of its descendants want it. The descendants (the EditText) needs to get and keep focus.

<ListView
...
android:descendantFocusability="afterDescendants"/>

3) The automatic showing/hiding of the Spelling Suggestions bar right above the keyboard keeps triggering the ListView to refresh. I turned the Suggestions off for any EditText in my ListView.

<EditText
...
android:inputType="textNoSuggestions|textVisiblePassword" />


回答6:

I have experienced exactly the same issue in my project.

To resolve the issue I have subclassed the EditText and handled the "Back" button press - to make sure that my EditTextclears focus at that moment.

Check this solution, on how to do it.

Good luck.



回答7:

recycler view works best and no need to mess around with any other properties anywhere.