2012-12-06 2 views
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); 

    } 
+0

'Loader'를 다시 시작한 후'onLoadFinished'가 유효한 데이터를 받는지 테스트 해 보았습니까? – Luksprog

+0

if (c! = null && c.getCount()> 0) -if else 문을 onLoadFinished에서 제거했습니다. 이제는 커서를 교체하고 목록을 새로 고칩니다.하지만 onActivityCreated에서 초기화 된 로더는 onCompateLoader를 호출하지 않고 onLoadFinished를 호출하는 경우가 있습니다. – Ramprasad

+1

'onLoadFinished'는 이전에 호출 된 onCreateLoader 없이는 호출 될 수 없습니다. 'getActivity(). getLoaderManager() ... '를 호출하고'Loader'를 저장하는 이유가 있습니까? 'getSupportLoaderManager(). initLoader (1, null, this);'를 호출하면됩니다. – Luksprog

답변

0

활동의 onCreate 또는 onResume에 단편을 추가합니까? 후자의 경우, 조각 설정 (트랜잭션 생성, 단편 추가, 커밋)을 onCreate로 옮길 수 있습니다. 그런 다음 restartLoader()가 제대로 작동합니다.