Проблемы с фокусировкой EditTexts в ListView (Android)

У меня есть ListView с несколькими EditTexts в каждом элементе. У меня нет проблем с аппаратной клавиатурой, но с мягкой клавиатурой все немного волнуется. У меня есть два вопроса.

Когда я в первый раз щелкаю на EditText, кажется, что он на короткое время имеет фокус, но затем теряет фокус, когда клавиатура показывается. Я должен затем нажать EditText еще раз, чтобы получить фокус.Когда EditText с фокусом прокручивается вне поля зрения, фокус переходит к ... ну ... см. Скриншот. Я не уверен, что происходит.

Подробнее о # 1:

Когда экран загружается впервые, фокус находится в поле «Gr High School Scale», но клавиатура не отображается.Если я немедленно нажму на нужный EditText, егоOnFocusChangeListener говорит мне, что он получает фокус, а затем теряет фокус. Визуально я вижу, что курсор появляется в поле, но когда клавиатура загружается, курсор отскакивает (как на скриншоте), и я не знаю, куда исчез фокус.

Я немного поиграл с атрибутами Focusable и DescendantFocusability ListView, но безрезультатно. Любой совет?

Каждый раз, когда EditText с фокусом прокручивается вне поля зрения, появляется другой пьяный курсор:

ОБНОВЛЕНИЕ: Соответствующий код.
Макет активности с 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:

<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" />

Настройка вида в моем адаптере:

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);

Я не уверен, что еще отправлять. У меня есть слушатели focus и textChange, но проблема существует, даже если они закомментированы. Дайте мне знать, если что-то еще нужно. Спасибо.

Более подробно о том, как фокус ведет себя при касании EditText:

EditText нажал (коснулся)EditText Получает фокусEditText теряет фокусListView получает фокус (и пытается установить дочерний фокусrequestChildFocus... не похоже на успех).ListView теряет фокусListView получает фокус (и снова пытается установить дочерний фокус).

Вышесказанное основано на наличии слушателей как для EditText, так и для ListView.Замечания: с аппаратной клавиатурой EditText получает фокус и все. Я думаю, что появление мягкой клавиатуры влияет на фокус.

ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ: В конце концов, работать с ListView было слишком сложно, особенно потому, что я хотел обновить несколько строк на основе изменений в EditText в одной строке. Это трудно сделать, когда клавиатура поднята, а ListView считает, что одновременно существует только несколько строк.

Я вместо этого сделал вложенные LinearLayouts. Каждый горизонтальный макет представлял собой «строку», и я поместил их в ArrayList, чтобы управлять ими, и это было сравнительно легко (все еще непросто).

Ответы на вопрос(2)

Ваш ответ на вопрос