2013-02-01 163 views
0

我有一個問題,其中EditText在ListView中的一行中。ListView行失去焦點

用戶可以在EditText中輸入多行文本。每個新行都會導致行展開,並使ListView刷新/更新。

我如何:

  • A)防止整體更新列表視圖?
  • B)重新調整上一個文本視圖的位置的列表視圖(視圖得到回收)
  • C)更好的方法?

我曾嘗試:

  • 子類ListView和設置OnSizeChanged,OnFinishInflate的選擇等
  • 攔截焦點的EditText上的損失,有重置列表選擇。 (問題的觀點得到回收)

目前正在使用:

  • 的MonoDevelop 3.0.6
  • 單爲Android:55年4月4日
  • Android SDK中:4.0(API級別14)

回答

0

嘗試玩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,您希望連接到TextChangedAfterTextChanged以獲取包含的文本並將狀態保存在某處。這可能是您顯示的適配器中的項目。