Re: [問題] 多個listview共用監聽
目前聽起來的感覺
我個人是猜測你是用Button/Spinner/其他AdapterView當作切換的開關
然後切換時,換ListView的內容達成的
因為你有提到:
1. 四個ListView是用共用同一個元件
2. 個別ListVeiw給了不同的Listener
可是最後點進去都是執行某固定一個Listener
不管有沒有猜對,都還是建議你用下面幾種方法解決會比較好:
A. TabHost或Spinner + Fragment
B. ViewPager
C. ViewPager + Fragment
難度由簡到難:B, C, A
(純屬個人想法)
最後,如果我上面猜測正確的話
那又該如何就現有的基礎去修正(假設客戶就是希望要長這樣)
首先先要了解一件事,雖然宣告了四個ListView變數
實際上四個ListView存的都是同一個View
也就是改了listview1後,2 3 4的內容都會跟著一起動
原因請去Google: java 參考
所以
第一步:其實只要宣告一個ListView變數就好了
第二步:只有一個ListView,那表示Listener也只要一個就好了
第三步:假設你四個Adapter都是用ArrayAdapter<String>,那Listener可以這樣寫:
onItemSelected(AdapterView<?> parent, View v, int position, long id) {
ArrayAdapter<String> adapter = (ArrayAdapter<String>) parent.getAdapter;
String data = adapter.getItem(position);
// data即為正確選到的資料
...
}
但實際上該怎麼寫,就要視你的Adapter是怎麼寫來決定了
※ 引述《asifsea (sea)》之銘言:
: layout配置只放一個listview,id為listclinic
: java檔裡宣告了四個listview,分別是listview1,2,3,4(如眼科系列診所,小兒科系列診所)
: 四個listview共用元件皆為findViewById(R.id.listclinic1)
: 但是四個listview裡的內容是不同的。
: 我想要點進每個listview的項目都可以正確顯示其代表的診所簡介
: 如眼科系列診所點進Item甲診所→顯示甲診所簡介
: 現在遇到的問題是,監聽事件要如何知道我指向的是四個中的哪個listview
: 1.有試過個別都給一個監聽器,如:
: listView1.setOnItemClickListener(Listener1);
: listView2.setOnItemClickListener(Listener2);
: 但是似乎無效,其不同listview的Item點進去都是顯示連到甲診所資料
這裡可以試看看換執行setOnItemClickListener順序
你會發現不同的ListView的item點進去會變成都是顯示乙(或丙、丁...)診所的資料
那就代表我猜的沒錯了XD
: 2.onItemSelected(AdapterView<?> parent, View v, int position, long id)
: parent,是用來選擇哪個listview的,但點進去都是顯示連到甲診所資料
: 要如何才能正確點進指定診所,顯示正確的簡介??
--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.126.68.4
※ 文章網址: http://www.ptt.cc/bbs/AndroidDev/M.1396633052.A.A8B.html
→
04/05 11:55, , 1F
04/05 11:55, 1F
→
04/05 11:58, , 2F
04/05 11:58, 2F
→
04/05 12:07, , 3F
04/05 12:07, 3F
→
04/05 12:10, , 4F
04/05 12:10, 4F
現在回來看這篇,覺得我打得有點跳痛,沒想到你看得懂XD
其實以目前的結構為基礎的話,解法也蠻多的
就我原本的解法要改成SimpleAdapter的話
那HashMap最好加上跟原始資料相關的Item
map.put("data_id", String.valueOf(id));
只是我不知道SimpleAdapter用getItem會取到什麼 (懶得試了)
所以Listener就跳過
----------------------------------------------------------
還有一個更偷吃步的方法
一樣改成一個ListView變數
但Listener設定四個
然後在Spinner裡的OnItemSelectedListener裡去換ListView的Listener:
onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch(position) {
case 0:
listview.setOnItemClickListener(Listener1);
break;
case 1:
listview.setOnItemClickListener(Listener2);
break;
...
}
}
理論上,這樣應該也可以達到你想要的結果
※ 編輯: tails32100 (59.126.68.4), 04/05/2014 13:10:28
推
04/05 20:23, , 5F
04/05 20:23, 5F
→
04/05 20:24, , 6F
04/05 20:24, 6F
→
04/05 20:25, , 7F
04/05 20:25, 7F
→
04/05 20:25, , 8F
04/05 20:25, 8F
→
04/05 20:26, , 9F
04/05 20:26, 9F
→
04/05 20:27, , 10F
04/05 20:27, 10F
→
04/05 20:43, , 11F
04/05 20:43, 11F
→
04/07 00:10, , 12F
04/07 00:10, 12F
→
04/15 15:05, , 13F
04/15 15:05, 13F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):