2012-01-11 9 views
4

他のアクティビティのArrayAdapterを使用するにはどうすればよいですか?私は)(MyListActivity.onCreateに次のようにやってみました:別のクラス/アクティビティのアダプタを使用する

setListAdapter(SomeOtherActivity.myAdapter); 
myAdapterがSomeOtherActivityで定義され、初期化され

。私は定義しsetListAdapter(myLocalAdapter)とMyListActivityに自分のアダプタを初期化する場合は、それが動作

SomeOtherActivity.myAdapter.getCount(); 

:しかし、私は私が呼び出しを介してSomeOtherActivity.myAdapterが完全に取り込まれていることが確認さにもかかわらず、空のリストを取得します。 setListAdapter(SomeOtherActivity.myAdapter)に切り替えると、空のリストが取得されます。私はそれをデバッグし、アダプタのgetView()も呼び出されていないことがわかりました。

助けてください?ありがとう。 RunnableをスレッドでMainActivity.onCreateで

()私のSubActivity.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; 

()

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 ..適切な解決策のため

+0

ありがとう、私は元の投稿にコードを追加しました。 – user1118764

+0

こんにちは、 問題は次の行にあります。 myList = generate(); generate()では、新しいリストを作成した後、そのリストを作成して返しました。パラメータとしてgenerate()にmyListを渡すように変更しました。うまくいくようです。 Runnableスレッドでアダプタにバインドされたリストを変更すると問題はありますか? – user1118764

+0

"アダプタの内容は変更されましたが、ListViewは通知を受け取りませんでした。アダプタの内容がバックグラウンドスレッドから変更されていないことを確認してください。時にはエラー。私はバックグラウンドスレッドでリストを生成するはずがないと思いますか?そうでない場合は、メインのUIスレッドをブロックせずにどうすればよいですか? – user1118764

関連する問題