DescendantFocusability
上のプロパティで遊んでみてくださいListView
。DescendantFocusability.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
たい場合です。これは、表示しているアダプターのアイテムである可能性があります。TextChanged
AfterTextChanged