0

EditText が ListView の行にあるという問題があります。

ユーザーは、EditText に複数行のテキストを入力できます。新しい行ごとに行が展開され、ListView が更新/更新されます。

どうやって:

  • A) リスト ビュー全体が更新されないようにしますか?
  • B)リストビューを前のテキストビューの位置に再フォーカスします(ビューはリサイクルされます)
  • C) より良い方法は?

私が試してみました:

  • ListView をサブクラス化し、OnSizeChanged、OnFinishInflate などの選択を設定します。
  • EditText のフォーカスの喪失を傍受し、そこでリストの選択をリセットします。(問題はビューがリサイクルされることです)

現在使用中:

  • モノデベロップ 3.0.6
  • Android 用モノ: 4.4.55
  • Android SDK: 4.0 (API レベル 14)
4

1 に答える 1

0

DescendantFocusability上のプロパティで遊んでみてくださいListViewDescendantFocusability.AfterDescendantsに設定すると、フォーカスとサイズ変更の問題が解決する可能性があると思います。

それは私の小さなサンプルで動作します:

MainActivity.cs

using Android.App;
using Android.Views;
using Android.Widget;
using Android.OS;

namespace ListViewTests
{
    [Activity(Label = "ListViewTests", MainLauncher = true, Icon = "@drawable/icon")]
    public class Activity1 : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            var lv = FindViewById<ListView>(Resource.Id.listView);
            lv.Adapter = new ArrayAdapter(this, Resource.Layout.ListViewItem, Resource.Id.textView, new [] {"1", "2"});
            lv.DescendantFocusability = DescendantFocusability.AfterDescendants;
        }
    }
}

ListViewItem.axml

<?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="fill_parent">
  <TextView
    android:id="@+id/textView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
  <EditText
    android:id="@+id/editText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
</LinearLayout>

ただし、ビューがリサイクルされるという問題には、おそらくもう少し作業が必要です。ビューの状態を何らかの方法で保存し、ビューが再度作成されたときに状態を復元する必要があります。したがって、アダプターの各アイテムについて、ビューのイベントに接続する必要があります。つまり、またはいずれかに接続して、含まれているテキストを取得し、状態をどこかに保存しEditTextたい場合です。これは、表示しているアダプターのアイテムである可能性があります。TextChangedAfterTextChanged

于 2013-02-01T19:10:19.553 に答える