2012-01-11 26 views
4

如何從其他活動使用ArrayAdapter?我試圖做的MyListActivity.onCreate下列():使用來自其他課程/活動的適配器

setListAdapter(SomeOtherActivity.myAdapter); 

其中myAdapter定義和SomeOtherActivity初始化。不過,我得到一個空列表,即使我覈實,SomeOtherActivity.myAdapter完全通過一個呼叫填充:

SomeOtherActivity.myAdapter.getCount(); 

如果我定義並與setListAdapter(myLocalAdapter)MyListActivity初始化我自己的適配器,它的工作原理。一旦我將它切換到setListAdapter(SomeOtherActivity.myAdapter),我得到一個空列表。我調試了它,發現適配器的getView()甚至沒有被調用。

請幫忙嗎?謝謝。

在MainActivity.onCreate()

listIsDone = false; 
myList = new ArrayList<ItemInfo>(); 
init = new Runnable() { 
    public void run() { 
    myList = generate(); // generate the list, takes a while 
    Collections.sort(myList, new CustomComparator()); // sorts the list 
    myAdapter = new MyInfoAdapter(MainActivity.this, R.layout.row, myList); 
    synchronized(this) { 
     listIsDone = true; 
     notifyAll(); 
    } 
    } 
}; 
Thread thread = new Thread(null, init, "Background"); 
thread.start; 

在我SubActivity.onCreate()

setListAdapter(MainActivity.myAdapter); 
doStuff = new Runnable() { 
    public void run() { 
    synchronized(MainActivity.init) { 
     if (!MainActivity.getListDone()) { 
     try { 
      MainActivity.init.wait(); // wait for list/adapter to be initialized 
     } catch (InterruptedException e) { 
     } 
     } 
    } 
    } 
}; 
Thread thread = new Thread(null, doStuff, "Background"); 
thread.start(); 

我發現我無法運行myAdapter.notifyDataSetChanged()在運行的線程(我得到運行時錯誤),但是如果我使用runOnUiThread()運行它,我可以在runnable中執行它。我猜所有的方法調用適配器需要在同一個UI線程中完成?

回答

0

請檢查currentActivity中myAdapter的可訪問性。 看起來你在初始化之前使用了適配器。

@share the code .. for proper solution

+0

謝謝,我已將代碼添加到原始帖子中。 – user1118764 2012-01-12 04:02:14

+0

嗨, 原來問題是在行: myList = generate(); 在generate()中,我創建了一個新列表,然後填充並返回它。我改變它傳遞myList生成()作爲參數,它似乎工作。 如果我修改綁定到適用於Runnable線程的適配器的列表,是否有任何問題? – user1118764 2012-01-12 08:21:31

+0

我得到「適配器的內容已更改,但ListView未收到通知。請確保適配器的內容不是從後臺線程修改的,而是僅從UI線程修改的。」錯誤有時。我猜我不應該在後臺線程中生成列表?如果沒有,那麼我應該怎麼做,而不阻止主UI線程? – user1118764 2012-01-12 09:00:54

相關問題