簡體   English   中英

我無法刷新我的列表視圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM