[英]I can't refresh my Listview
我有兩個類,第一個是針對GUI的,我在其中聲明了listview和適配器,以及setter,以從第二個類中調用它們。
public class AndroidGUIModifier implements IMyComponentGUIModifier, IFragmentEvents {
private transient ListView lv;
List<String> mydeviceslist;
ArrayAdapter<String> adapter ;
public void setAdapter(ArrayAdapter<String> adapter) {
this.adapter = adapter;
adapter.notifyDataSetChanged();
}
public void setMydeviceslist(List<String> mydeviceslist) {
this.mydeviceslist = mydeviceslist;
}
@Override
public void onCreateView() {
lv=(ListView) fragment.findViewById("xdevices") ;
mydeviceslist = new ArrayList<String>();
adapter = new ArrayAdapter<String>(fragment.getContext(),android.R.layout.simple_list_item_1,mydeviceslist);
lv.setAdapter(adapter);
在第二堂課中,我將等待一個事件以接收要在列表視圖中加載的列表,然后調用列表設置器來設置新的接收列表,並調用適配器設置器來對其進行更新,但是它沒有盡管我收到了日志中的設備列表,但是什么也沒有顯示。
public class triprincipal extends BCModel {
public List<String> mydevices ;
BCEvent bcEvent;
final ArrayAdapter<String> adapter =guiModifier.getAdapter();
while (isRunning()) {
bcEvent = waitForBCEvent();
if (bcEvent.getID() == checkevent) {
mydevices = bcCommandSenderPlugin.getDevicesNames(); // here I get a list of my devices
Log.i("devices", mydevices.toString());
guiModifier.getFragment().getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
guiModifier.setMydeviceslist(mydevices);
guiModifier.setAdapter(adapter);
}
} );
adapter.notifyDataSetChanged()
在這種情況下將不起作用,因為您傳遞給適配器的引用的值實際上並未更改。 您將需要創建一個新的Adapter
並將其設置為ListView
使其起作用。 將您的setAdapter()
更改為:
public void setAdapter() {
this.adapter = new ArrayAdapter<String>(fragment.getContext(), android.R.layout.simple_list_item_1, mydeviceslist);
lv.setAdapter(adapter);
}
在setMydeviceslist()中執行以下操作:
this.mydeviceslist.addAll(mydeviceslist);
adapter.notifyDataSetChanged();
希望它能對您有所幫助。
嘗試在相同的片段/活動中更新列表,並在更新后在相同的活動/片段中調用notifyDataSetChanged()....不要重復設置列表上的適配器...希望它會有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.