程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> listview-在Activity中調用Adapter.getView更改不了某控件的狀態

listview-在Activity中調用Adapter.getView更改不了某控件的狀態

編輯:編程綜合問答
在Activity中調用Adapter.getView更改不了某控件的狀態

在activity中調用adapter.gerView方法(此adapter是繼承baseAdapter的而來的),得到了某個控件在listView列表項中的View,然後通過這個View.FindViewByID找到這個控件,最後更新控件的狀態,但是為什麼不起作用?
PS : 下面那個state的值是在廣播中收到的消息,由於太多就不一一貼出來了。
MyAdapter adapter = new MyAdapter(context);

View view2 = adapter.getView(ListViewPostion, convertView, null);

ImageButton btn = (ImageButton) view2.findViewById(R.id.btn__switch);

if(state) {

btn.setImageResource(R.drawable.switch_on);

}else {

btn.setImageResource(R.drawable.switch_off);

}

最佳回答:


題主對ListView的機制理解有些不太對。
Android將ListView與Adapter進行了接耦,當一個Item需要在ListView上進行展示的時候,ListView會調用與它綁定的adapter.getView()來獲取
這一個Item所需要的View,然後將這個View綁定到ListView的這一個Item上進行展示。
所以Adapter的getView()是一個回調方法,有@Override標識,實際上ListView調用getView()獲得View之後,內部還有一些操作來讓這個View顯示出來。
題主的代碼完成了“獲取這一個Item”所需要的View,並且對View進行了內容設置,但是沒有完成"讓ListView展示這個View"這部分的操作。
這部分的操作,對於調用者來說,在adapter.notifyDataSetChanged()方法裡進行。
所以題主應該在MyAdapter中通過一個變量來保存R.drawable.switch_on或者R.drawable.switch_off的值,例如
private int imageButtonContent = R.drawable.switch_on;
然後MyAdapter.getView()中通過imageButtonContent這個值來設置ImageButton的內容。
當Activity接收到廣播的時候,就將MyAdapter的imageButtonContent值根據你的需要切換,然後再調用adapter.notifyDataSetChanged()來刷新ListView的內容。

希望能夠幫到你,如果還不明白的話可以加我QQ271200723

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved