2011-11-09 211 views
2

我有一個GridView,顯示幾十行自定義佈局,每個自定義佈局包含一個EditText和一個TextView對象。Android從GridView的EditText獲取文本

如果我理解正確,我應該擴展BaseAdapter類來完成。如果是這樣,我怎樣才能訪問特定的EditText對象?

此外,如果某個EditText視圖不再顯示,回收視圖是否會導致用戶輸入的文本丟失?

有沒有更簡單的方法來完成我在這裏描述的內容(可能是GridView以外的東西)?

+0

你有沒有找到解決方案? –

回答

1

當您擴展BaseAdapter您必須覆蓋的方法之一是getView(...)。在此方法中,您創建需要顯示的視圖。如果要保留在EditText中輸入的文本,則需要執行的操作是在EditText上設置一個TextWatcher,傳入EditText(參數getView(...)中的參數)位置,並且每當更改文本時,都將文本保存在一組排序。然後,只要該位置通過getView(...)方法返回,就從數組中抓取文本並填充EditText

+0

聽起來可行,但很複雜。僅僅爲此使用TableLayout(行數不應超過100)會簡單得多嗎? – Allen

+0

如果您的所有單元格都具有相同的含義,即每個單元格都具有EditText和TextView,則使用TableLayout並不會更簡單。使用適配器的力量在於屏幕外的位置不存儲在內存中,給您一個很小的內存佔用空間。無論何時滾動,重新使用屏幕上的視圖使視圖進入屏幕。 –

+0

我看到,當我使用TextWatcher時,有三種方法被強制覆蓋。爲了用更新的文本更新我的字符串數組,我必須知道新文本屬於哪個EditText對象(我使用它來獲取字符串數組中的正確索引)。可編輯對象是否「知道」它是哪一個? – Allen

0

你應該使用一個底層的數據結構(比如List),它應該爲Grid的每個元素保存數據。

TextView和EditText應該從此列表中填充。