1
목록 항목을 길게 누르면 상황에 맞는 메뉴가있는 목록 조각이 있습니다. 목록 항목이 클릭되고 목록 항목이 내 데이터베이스에서 제거되었습니다. 그러나 목록이 다시 시작 로더를 호출 한 후에도 새로 고치지 않습니다?목록보기가 다시 시작 로더를 호출 한 후에도 새로 고침되지 않음
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setEmptyText("Loading...");
myAdapter = new MySimpleCursorAdapter(getActivity().getApplicationContext(), R.layout.my_list_item, null, new String[] {DBConstants.NAME,DBConstants.ITEM1,DBConstants.SYMBOL}, new int[] {R.id.my_companyname,R.id.my_item1,R.id.my_symbol},0);
setListAdapter(myAdapter);
registerForContextMenu(getListView());
MyLoader = getActivity().getSupportLoaderManager().initLoader(1, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
DBHelper dbHelper=new DBHelper(getActivity());
return new MyLoader(getActivity(),dbHelper);
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor c) {
if(c!=null && c.getCount()>0){
myAdapter.swapCursor(c);
if (isResumed()) {
setListShown(true);
} else {
setListShownNoAnimation(true);
}
}
else
{
setEmptyText("Not selected");
}
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
myAdapter.swapCursor(null);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
String selectedItem = item.getTitle().toString();
Log.i("context", "selected context menu item->"+selectedItem);
if(selectedItem.equalsIgnoreCase("Remove"))
{
AdapterView.AdapterContextMenuInfo menuInfo=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
String[] args={String.valueOf(menuInfo.id)};
Log.i("context", String.valueOf(menuInfo.id));
new DBHelper(getActivity()).getWritableDatabase().delete(DBConstants.MYSTOCKS_TABLE, "_ID=?", args);
getActivity().getSupportLoaderManager().restartLoader(1, null, this);
/*
Cursor cursor = myAdapter.getCursor();
myAdapter.swapCursor(cursor);
*/
//getLoaderManager().initLoader(0, null, this);
}
return super.onContextItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
//super.onCreateContextMenu(menu, v, menuInfo);
getActivity().getMenuInflater().inflate(R.menu.mystocks_context, menu);
}
'Loader'를 다시 시작한 후'onLoadFinished'가 유효한 데이터를 받는지 테스트 해 보았습니까? – Luksprog
if (c! = null && c.getCount()> 0) -if else 문을 onLoadFinished에서 제거했습니다. 이제는 커서를 교체하고 목록을 새로 고칩니다.하지만 onActivityCreated에서 초기화 된 로더는 onCompateLoader를 호출하지 않고 onLoadFinished를 호출하는 경우가 있습니다. – Ramprasad
'onLoadFinished'는 이전에 호출 된 onCreateLoader 없이는 호출 될 수 없습니다. 'getActivity(). getLoaderManager() ... '를 호출하고'Loader'를 저장하는 이유가 있습니까? 'getSupportLoaderManager(). initLoader (1, null, this);'를 호출하면됩니다. – Luksprog