カスタム カーソル アダプターの SavedTripsAdapter を使用して、データベースが取り込まれたリスト ビューがあります。
アダプターを初期化する方法は次のとおりです。
String[] from = new String[] { "purp", "fancystart", "fancyinfo", "endtime", "start", "distance", "status" };
int[] to = new int[] { R.id.TextViewPurpose, R.id.TextViewStart,
R.id.TextViewInfo };
sta = new SavedTripsAdapter(getActivity(),
R.layout.saved_trips_list_item, allTrips, from, to,
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
lv.setAdapter(sta);
リスト項目をクリックすると、AsyncTask で完了する次の関数を呼び出すことで、再度アップロードできます。
FragmentSavedTripsSection 内:
private void retryTripUpload(long tripId) {
TripUploader uploader = new TripUploader(getActivity());
uploader.execute();
}
TripUploader で:
@Override
protected void onPostExecute(Boolean result) {
try {
if (result) {
Toast.makeText(mCtx.getApplicationContext(),"Trip uploaded successfully.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mCtx.getApplicationContext(),"Cycle Atlanta couldn't upload the trip, and will retry when your next trip is completed.", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
// Just don't toast if the view has gone out of context
}
}
ただし、TripUploader は別のクラスです。トリップが正常にアップロードされるとデータベースが更新されるので、savedTripsAdapter.notifyDataSetChanged() を使用してリストを更新したい
savedTripsAdapter.notifyDataSetChanged() をどこに、どのように配置する必要がありますか?
リストビュークラスに入れるとonPostExecuteと呼ばれません。しかし、TripUploader の onPostExecute 関数に入れた場合、リスト ビュー クラスでインスタンス化した、savedTripsAdapter の同じインスタンスにアクセスするにはどうすればよいでしょうか?
ご協力いただきありがとうございます!