web-dev-qa-db-fra.com

Modifier le texte dans ListActivity ListView perd le focus lorsque le clavier apparaît

J'ai cherché et cherché une réponse à cette question et tout ce qui ressemblait à une réponse n'a pas fonctionné, alors je suppose que je vais simplement demander.

J'ai quelques cases EditText ajoutées à une ListView qui constituent la base d'une ListActivity. Lorsque je règle windowSoftInputMode sur adjustPan et que je clique sur une EditText, cela fonctionne jusqu'à ce que vous cliquiez dessus, puis que le clavier le recouvre. Lorsque j'utilise adjustResize, cela fonctionne sauf lorsque le clavier est affiché, la EditText perd le focus et je dois taper dessus à nouveau pour taper. 

J'essayais de comprendre comment saisir la onResize, mais cela semble être associé à la vue et non à l'activité et je ne sais pas trop comment l'écouter. J'ai également essayé toutes sortes de paramètres de mise au point sur les zones EditText et la ListView elle-même (comme suggéré dans d'autres articles que j'ai lus) qui ne semblent pas les aider non plus.

24
Physibeth

Tout ce que vous avez à faire est d’appliquer cela à votre ListView:

XML:

Android:descendantFocusability="afterDescendants"

Java:

listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
60
Bojan Kseneman

Dans mon cas, cela a parfaitement fonctionné avec l’ajout de cette sorte de code au manifeste:

Android:windowSoftInputMode="adjustPan"
2

Avez-vous essayé après avoir fait adjustResize en vous assurant de réinitialiser le focus sur EditText en faisant quelque chose comme EditText.requestFocus(); afin qu'il soit réactivé et que l'utilisateur n'ait pas à taper à nouveau dessus. vous pouvez utiliser EditText.isFocused() pour voir si elle est focalisée (true) ou non (false) dans une instruction de journal de débogage ou quelque chose de ce genre.

vous devrez peut-être définir le champ sur focusable également à l'aide de SetFocusable(), mais soyez prudent, car cela pourrait potentiellement détourner l'attention de la ListView elle-même et vous empêcher de pouvoir faire défiler ou sélectionner des éléments ultérieurement. Vous devrez donc jouer avec le paramètre focusable et est concentré des choses.

0
Wolfcow

J'ai eu exactement le même problème dans mon projet.

Pour résoudre le problème, j’ai sous-classé la EditText et géré l’appui sur le bouton "Précédent" - pour être sûr que ma EditTextclears se concentre à ce moment-là.

Vérifiez cette solution , sur la façon de le faire.

Bonne chance.

0
Anatoliy
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());
                    }
                }
            });

Salut ci-dessous lien peut aider pour vous http://mylearnandroid.blogspot.in/2014/06/listview-problem-while-scrolling.html

0
Ramesh Thangaraj

la vue Recycler fonctionne mieux et nul besoin de perdre son temps avec d’autres propriétés.

0
Aman Agarwal

Pour moi, une combinaison des éléments suivants m'a aidé (en particulier le numéro 3):

1) Ajoutez ce qui suit à l’activité connexe dans le fichier manifeste. C’est nécessaire pour redimensionner votre ListView afin de remplir uniquement la zone située au-dessus du softKeyboard:

Android:windowSoftInputMode="adjustResize"

2) Avec ce qui suit, ListView n’obtient le focus que si aucun de ses descendants ne le souhaite. Les descendants (le EditText) doivent avoir et rester actifs.

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

3) L’affichage/masquage automatique de la barre de suggestions d’orthographe juste au-dessus du clavier continue de déclencher l’actualisation de ListView. J'ai désactivé les suggestions pour tout EditText dans mon ListView.

<EditText
...
Android:inputType="textNoSuggestions|textVisiblePassword" />
0
Brabbeldas