ListFragment
あなたの友達の「グループ」を持つアクティビティがあります。グループは sqlite データベースに保存されます。
グループをクリックすると、別のアクティビティ ページが表示されます。このページには、その特定のグループの参加者が表示されます。
参加者ページには、「グループを削除して削除する」オプションがあるアクション バー メニューがあります。これにより、「グループ」ページに戻ります。これは、脱退したばかりのグループのメンバーではなくなったためです。
私の問題は、[参加者] ページで削除オプションをコーディングすると、[グループ] ページにアダプターへの参照がないことです。notifyDataSetChanged
そのため、グループ ページにアクセスできません。したがって、[グループ] ページに戻ると、グループの 1 つを削除しただけで、リストは同じです。(それか、私のsqlite削除クエリが機能していない可能性があります)
また、notifyDataSetChanged
メニューオプションで使用することになっているかどうかもわかりません。onCreate
またはおそらく他のライフサイクルメソッドで何かを呼び出す方が理にかなっていますか?
どんな助けでも大歓迎です。ありがとう!
擬似コード:
GroupListFragment
public class GroupListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {
// custom CursorLoader which is based on the SimpleCursorLoader found at the below link
// http://stackoverflow.com/questions/7182485/usage-cursorloader-without-contentprovider
// Basically, the CursorLoader was subclassed to replace references of the content provider
// with the sqlite database
public static final class CustomCursorLoader extends SimpleCursorLoader{
//relevent thing here is that my custom cursor loader queries my database
// in the loadInBackground() method, returning a cursor.
}
// Standard onCreate, onActivityCreated and onLoadFinished methods
// onCreateLoader is the only somewhat different method in that it uses my custom
// cursorloader class
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mAdapter = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_list_item_1,null,FROM,TO,0 );
setListAdapter(mAdapter);
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setListAdapter(mAdapter);
getLoaderManager().initLoader(0,null,this);
}
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
return new CustomCursorLoader(getActivity(),getHelper());
}
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
mAdapter.swapCursor(cursor);
}
参加者活動ページ
//relevant section is menu
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
case R.id.deleteGroupMenuSelection:
//my db helper class
ContractDBHelpers mHelper = new ContractDBHelpers(getApplicationContext());
SQLiteDatabase db = mHelper.getWritableDatabase();
db.delete(GroupContract.GroupDetails.TABLE_NAME, GroupContract.GroupDetails._ID+"=?",new String[] {Integer.toString(position)});
db.close();
/***********************************************************************
* here is where I think I'm supposed to notifyDataSetChanged
* but since I'm in an Activity, I don't know how to reference the adapter
************************************************************************/
Intent intent = new Intent(this,MainActivity.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}