35 votes

Buggy ListView me rend triste

J'ai un ListView où j'ai défini la disposition de chaque élément dans un fichier XML distinct. Dans ce fichier j'ai inclus un RatingBar et EditText.

J'ai créé par programmation 7-8 éléments dans cette ListView. Quand je les faire défiler, il semble être assez buggé. Voici quelques exemples:

  1. Si j'ai mis l'accent à l' EditText dans la première ligne, puis faites défiler vers le bas de l' ListView, aléatoire EditTexts d'autres lignes ont le focus. Il me semble que le prochain EditText après l'concentre disparaît reçoit le focus. C'est peut-être intentionnel, mais, en tant qu'utilisateur, il semble très bizarre.

  2. Si j'ai mis le focus à un EditText, de recevoir un clavier virtuel, tapez quelque chose, et cliquez sur le bouton "Terminé" sur mon clavier virtuel, l' EditText se vide dès que le clavier virtuel disparaît.

  3. Parfois, lorsque je clique sur un EditText, de recevoir un clavier virtuel et de commencer à taper des lettres, les lettres disparaissent dès que je frappe.

  4. Quand je clique sur un EditText, le clavier virtuel montre elle-même, mais l' EditText perd le focus et je dois cliquer sur l' EditText de nouveau.

  5. Même si j'ai mis l' RatingBar de focusable="false", si je déplace la molette de défilement, il est toujours en saisit le focus.

Un de mes problèmes est tout le visible éléments de la liste de redessiner quand je tape un caractère sur le clavier virtuel (et depuis le texte de l' EditText est fixé à certaines données, qui est vide, elle est effacée. Je ne comprends pas pourquoi Android pourrait décider de les redessiner la liste à chaque fois que je tape un caractère.

Voici le XML que j'utilise pour dessiner. Ils sont blancs, bulles, avec un gris de pensionnaire, et un texte, une RatingBar et EditText à l'intérieur:

<?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>

19voto

Andrew Points 4526

Il semble que ListViews ne soit pas capable de bien gérer EditTexts. J'ai fait quelques recherches et le consensus semble être «ne faites pas ça». Donc, ce à quoi j'ai eu recours est de créer un fichier de mise en page simple qui est un ScrollView avec un LinearLayout à l'intérieur. Dans ma méthode onCreate, je gonfle la vue que j'utilisais pour mon élément de liste et je l'ajoute au LinearLayout. J'ajoute également la vue à une liste de tableaux afin de pouvoir enregistrer les données dans chaque vue plus tard.

Cela vous semble-t-il raisonnable?

5voto

Eh bien, ajoutez ceci à votre activité dans le manifeste ... android: windowSoftInputMode = "adjustPan" Exemple ...

 <activity android:name=".mapview.AddParkingLotActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan"/>
 

4voto

Marylia Gutierrez Points 236

J'avais le même problème. Mon EditText à l'intérieur de LisView perdait le focus lorsque le clavier apparaît, donc getView à partir de l'élément ListView que j'ai mis

 final EditText editInput = (EditText)convertView.findViewById(R.id.edit_input);
editInput.requestFocusFromTouch();
 

Et ce travail pour moi.

0voto

ashish Points 41

j'ai un problème que j'ai résolu en commentant cette ligne this.getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X