2010-07-06 29 views
0

假設我有一個3行的列表視圖。如果用戶單擊第1行中的某個按鈕,它將展開一個菜單(這只是顯示/隱藏的線性佈局)。如果他們然後點擊第2行中的項目,我想能夠摺疊第1行中的菜單。這可能嗎?如果是這樣,怎麼樣?android從另一行訪問listview行

+0

你在用人們接近listviews的方式犯了一個常見的錯誤。你試圖從行中控制列表視圖,這不是listview的目的。相反,您應該考慮如何通知您的更改活動,以便IT部門能夠處理對listview的更改。 – CodeFusionMobile 2010-07-06 21:07:50

+0

CSharperWithJava,你能給出一個代碼示例嗎?假設你想在第2行中的第2行中的按鈕被點擊時修改第1行中的TextView的文本....你會怎麼做? – Ben 2010-07-06 21:44:36

回答

1

保存對您希望稍後操作的視圖的引用。可能包裝在final變量中,那麼你將很容易改變。

+0

永遠不要這樣做。保存引用到列表視圖中的視圖將導致您的主要問題。只要屏幕關閉,嘗試寫入視圖就會在內部回收視圖,最好是導致崩潰。 – CodeFusionMobile 2010-07-06 21:03:30

+0

是的,CSharperWithjava是正確的...這是一個壞主意...... – Ben 2010-07-06 21:42:18

+0

我說,因爲我試過它,它的所有越野車... – Ben 2010-07-06 21:50:46

1

您可以隨時使用getContext()View得到一個參考含Activity,您可以轉換爲ListActivity(假設你正在使用的),並調用常用的方法,在那個位置上獲取數據ListAdapter:

((ListActivity) v.getContext()).getListAdapter().getItem(1) 

然後,你可以操縱你的數據。但是你要和你的ListAdapter致電notifyDataSetChanged()

但它很可能是一個很多方便您和您的用戶只使用ExpandableListView,它爲您提供了可預見的互動用戶已經知道了可擴展的列表。您可以在AOSP的瀏覽器源代碼中查看歷史活動以獲取真實的示例。如果它不完全符合您的需求,您可以隨時從Android源代碼中抽取ExpandableListView本身的代碼。

+0

我希望這很容易,不幸的是可擴展列表視圖不會做我需要它。另外,我沒有使用ListActivity。相反,我有一個ListView,它是在一個佈局中,然後由一個正常的活動渲染... – Ben 2010-07-06 21:46:15

+0

那麼,你可能應該只使用ListActivity;它僅僅是一個正常活動的輕量級包裝,可以非常輕鬆地跟蹤您的ListView/ListAdapter。但是如果你不想或不能出於某種原因,你可以在你的Activity的某個地方保留一個成員變量引用到你的ListView/Adapter,或者你可以這樣做(用你的listview的ID代替android。 ((ListActivity)v.getContext())。findViewById(android.R.id.listview).getAdapter()。getItem(1)' 等 – 2010-07-07 14:38:37