だから私は、独自のカスタム arrayadapter を使用するこの ListView を持っています。データベースなどからデータを取得するなど、うまく機能しますが、設定後は更新されません。結果のために何かを行うこのアクティビティがあり、戻ってきたらこれを呼び出します:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1899)
{
//a new client was added to the list...
try {
clients = (ArrayList<ClientsData>) clientsDataDao.queryForAll();
} catch (SQLException e) {
// TODO Auto-generated catch block
}
theClients.notifyDataSetChanged(); //this is not working here
showClientDetails(mCurrentSelectedItemIndex); //update other fragment.
}
}
問題は、notifyDataSetChanged()
実際には何もしないということです。さらに調査しましたが、UI スレッドで呼び出す必要があると思いますか? しかし、私は FragmentActivity にいますが、これを行う方法がわかりませんか? 実行可能なスレッドを作成して、そこから呼び出す必要があるかもしれません。スレッドをあまり使用していないので、よくわかりませんが、これを行う方法に関する良い (簡潔で完全な) 例はありますか? それともこれも私の問題ですか?
(注: 私は ORM Lite に切り替えました。この前に、この特定の場所にカーソルでSimpleCursorAdapter
a を呼び出した後に更新できる a があり、次に.requery
notifyDataSetChanged()
編集:
さて、いくつかのコメントの後、AsyncTask ルートを調査しました...:
private class addViewsToList extends AsyncTask<Void, Void, Boolean>{
protected void onPostExecute(Boolean result) {
theClients.notifyDataSetChanged();
}
@Override
protected Boolean doInBackground(Void... params) {
// TODO Auto-generated method stub
return true;
}
}
そして私の中でonActivityCreated
:
new addViewsToList().execute();
そして私のonActivityResult(...)
:
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1899)
{
//a new client was added to the list...
try {
clients = (ArrayList<ClientsData>) clientsDataDao.queryForAll();
} catch (SQLException e) {
// TODO Auto-generated catch block
}
//do I have to reset the adapter?
setListAdapter(theClients);
showClientDetails(mCurrentSelectedItemIndex);
}
まだリストの更新はありません...
だから私は自分が何をしているのかわからないことを示しました:)