2012-04-23 17 views
2

我有一個簡單的ListView支持我的ArrayAdapter,它每5秒左右更新一次新數據。每隔5秒鐘,我在我的ArrayAdapter上調用notifyDataSetChanged,導致ListView重新繪製新數據。所有這一切都很好,我每5秒鐘就能看到一次新的數據。帶有實時數據的Android ListView和EditTexts

但是,在我的ArrayAdapter的getView方法中,我正在給包含EditText的LinearLayout充氣。以下是我想要解決的問題:

  1. 用戶在某些輸入中的行和類型之一中選擇了EditText。
  2. 用戶將注意力集中在EditText上超過5秒鐘。
  3. notifyDataSetChanged在新數據到達陣列適配器時被調用。
  4. 用戶失去了對EditText的重點,因爲它已被重繪。 notifyDataSetChanged似乎導致所有ListView元素重繪。

什麼是允許用戶保持對這個EditText的焦點,但確保數據總是新鮮的最佳方式?

感謝,

肖恩

+0

編寫自定義'BaseAdapter',提供實際(可用於內存,非空)視圖,選定的一個(如選擇哪個用戶並鍵入文本或當前聚焦)。要更新數據:在適配器中存儲描述數據的對象列表,然後拋出列表,如果可用視圖,則使用關聯(新)對象手動更新它(如'getView'方法中那樣)。這是一種模仿'notifyDataSetChanged' – 2012-04-24 02:08:02

+0

嗨弗拉基米爾 - 感謝您的答覆。我應該在我的原始問題中真正地概述了這一點,但是如果可能的話,我寧願繼續使用notifyDataSetChanged。瀏覽ListView中的每一行並更新視圖,而不是依賴getView被調用,這不是一條我想立即下去的道路。由於我的數據集中的項目數量可能會發生變化,我不確定列表視圖迭代解決方案對我而言是否可行。非常感謝。 – seanoshea 2012-04-24 16:10:54

+0

沒問題,你可以玩這些方法http://developer.android.com/reference/android/widget/AdapterView.html#getFirstVisiblePosition%28%29和http://developer.android.com/reference/android/ widget/AdapterView.html#getLastVisiblePosition%28 – 2012-04-25 00:11:30

回答

0

它可能不是最好的方式,但一個快速的方式。覆蓋notifydatasetchanged,首先檢查是否有一個具有焦點的元素(或者當它獲得焦點並且不會丟失焦點時將其存儲),存儲輸入,調用super.notifyDatasetChanged,寫入舊值。

如果適配器有太多項目,這可能不是一個好的解決方案。

+0

Siyamed - 感謝您的評論。如果我的適配器有'太多'項目,爲什麼這個解決方案不是一個好主意,你是否介意擴大一點? – seanoshea 2012-04-24 16:12:07

相關問題