Problemas com o foco de EditTexts em um ListView (Android)

Eu tenho um ListView com alguns EditTexts em cada item. Não tenho problemas com um teclado de hardware, mas as coisas surgem um pouco com o teclado virtual. Eu tenho dois problemas.

Quando clico pela primeira vez em um EditText, ele aparece brevemente por foco, mas perde o foco assim que o teclado é exibido. Preciso clicar no EditText novamente para obter o foco.Quando um EditText com foco é deslocado para fora da vista, o foco passa para ... bem ... veja a captura de tela. Não tenho certeza do que está acontecendo.

Mais detalhes no # 1:

Quando a tela é carregada pela primeira vez, o foco está no campo "Gr High School Scale", mas o teclado não é mostrado.Se eu clicar imediatamente em um EditText desejado, seuOnFocusChangeListener me diz que recebe o foco e depois perde o foco. Visualmente, vejo o cursor aparecer no campo, mas quando o teclado carrega, o cursor salta (como na captura de tela) e não sei para onde foi o foco.

Eu brinquei um pouco com os atributos Focusable e DescendantFocusability do ListView, mas sem sucesso. Algum conselho?

Cada vez que um EditText com foco é deslocado para fora da vista, outro cursor bêbado é exibido:

UPDATE: código relevante.
Layout de atividade com o ListView XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res/com.NsouthProductions.gradetrackerpro"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.NsouthProductions.gradetrackerpro.Activity_EditCourseGPA" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="34dp"
    android:text="Define the GPA and Percent scale for this course." />

<RadioGroup
    android:id="@+id/radioGroup1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textView1"
    android:layout_marginLeft="5dp" >

    <LinearLayout
        android:id="@+id/linlay_rad_group_existing_scale"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <RadioButton
            android:id="@+id/radio0_existing_scale"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:checked="true"
            android:text="Existing Scale" />

        <Spinner
            android:id="@+id/spinner_existing_scales"
            android:layout_width="wrap_content"
            android:layout_height="33dp"
            android:layout_gravity="right"
            android:layout_weight="1" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/linlay_rad_group_new_scale"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <RadioButton
            android:id="@+id/radio1_new_scale"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:text="New Scale" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:lines="1"
            android:maxLines="1"
            android:text=" " />

        <EditText
            android:id="@+id/editText1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:inputType="textPersonName"
            android:maxLines="1"
            android:scrollHorizontally="true"
            android:text="Gr High School Scale" >

            <requestFocus />
        </EditText>

    </LinearLayout>
</RadioGroup>


 <LinearLayout
    android:id="@+id/linlay_scale_save_buttons"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true" >

    <Button
        android:id="@+id/btn_gpa_cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/btn_gpa_save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

 <ListView
     android:id="@+id/listview_scale"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_above="@id/linlay_scale_save_buttons"
     android:layout_alignParentLeft="true"
     android:layout_below="@id/radioGroup1"
     android:focusable="true"
     android:focusableInTouchMode="true"
     android:headerDividersEnabled="true"
     android:scrollingCache="true" >

 </ListView>

XML dos itens da lista:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linlay_scale_list_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

        <CheckBox
                android:id="@+id/checkbox_scale_item"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="A-" />

            <EditText
                android:id="@+id/et_gpa"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:enabled="true"
                android:inputType="numberDecimal"
                android:maxLength="6"
                android:text="4.000" />

            <EditText
                android:id="@+id/et_min"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:enabled="true"
                android:inputType="numberDecimal"
                android:maxLength="6"
                android:text="94.75" />

            <EditText
                android:id="@+id/et_max"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:inputType="numberDecimal"
                android:maxLength="6"
                android:text="100.0" />

Configurando a visualização no meu adaptador:

View v = convertView;
ViewHolder holder;

    v = inflater.inflate(R.layout.scale_list_item, 
    holder = new ViewHolder();
    holder.cb = (CheckBox) v.findViewById(R.id.checkbox_scale_item);
    holder.et_gpa = (EditText) v.findViewById(R.id.et_gpa);
    holder.et_min = (EditText) v.findViewById(R.id.et_min);
    holder.et_max = (EditText) v.findViewById(R.id.et_max);

Não tenho certeza do que mais postar. Tenho foco e ouvintes do textChange, mas o problema existe mesmo se eles forem comentados. Deixe-me saber se mais alguma coisa é necessária. Obrigado.

Mais detalhes sobre como o foco está se comportando quando o EditText é tocado:

O EditText é clicado (tocado)EditText Recebe focoEditText perde o focoO ListView ganha foco (e tenta definir a exibição do foco filhorequestChildFocus... parece não ter sucesso).ListView perde o focoO ListView ganha foco (e tenta definir o foco filho novamente).

O acima é baseado em ter ouvintes para o EditText e o ListView.Nota: com um teclado de hardware, o EditText ganha foco e é isso. Acho que o teclado virtual afetando o foco.

ATUALIZAÇÃO FINAL: No final, trabalhar com o ListView era muito difícil, especialmente porque eu queria atualizar várias linhas com base nas alterações em um EditText em uma linha. Isso é difícil de fazer quando o teclado está ativado e o ListView considera apenas algumas das linhas existentes a qualquer momento.

Em vez disso, criei LinearLayouts aninhados. Cada layout horizontal era uma "linha" e eu os colocava dentro de um ArrayList para gerenciá-los e era um pedaço de bolo, comparativamente (ainda não é fácil).

questionAnswers(2)

yourAnswerToTheQuestion