2013-12-15 4 views
0

나는 목록보기가있는 주 활동이 있습니다. 목록보기 항목은 LoaderManager와 함께로드됩니다.이미 닫힌 개체를 다시 열 수있는 Attemp android.database.sqlite

내가 (수익 키를 사용) 돌아갈 때 내가 목록보기에서 항목을 클릭

은 내가

문제가 ("으로 startActivityForResult"로) 자세한 내용 를 보여줍니다 다른 활동을 엽니 다 정보를 주 활동으로 표시하는 활동에서 다시 클릭 한 다음 예외가 발생합니다. 이미 닫힌 개체를 다시 열려고 시도합니다. 내가 그 활동에서 돌아 가면

하지만 주요 활동 (실제로 "마무리()"입니다) 그리고 난 예외를 얻을 다시 cllick 내가이 만든 버튼 (즉, 더 많은 정보를 보여줍니다)

누구는 문제가 무엇인지 압니까?

감사합니다.

private void display_listview() 
    { 
     // create an adapter from the SimpleCursorAdapter 
     dataAdapter = new SimpleCursorAdapter(
       this, 
       R.layout.row_invite_layout, 
       null, 
       columns, 
       to, 
       0); 

     // Assign adapter to ListView 
     listView.setAdapter(dataAdapter); 

     //Ensures a loader is initialized and active. 
     getSupportLoaderManager().initLoader(0, null, this); 


     //add implementation to listview item click 
     listView.setOnItemClickListener(new OnItemClickListener() 
     { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) 
      { 

       Cursor cursor = (Cursor) listView.getItemAtPosition(position); 

       IInvite invite = LoadFromCursor(cursor); 

       cursor.close(); 

       mUpdateFlag = true; 

       if(!mTrashFlag) // Trash Can is turned off 
       { 
        Intent intent = new Intent(getApplicationContext(), InviteViewActivity.class); 
        intent.putExtra("invite",(Invite)invite); 
        startActivityForResult(intent, INVITE_REQUEST_ID); 
       } 
       else // Trash Can is turned on 
       { 
        getContentResolver().delete(InviteContentProvider.CONTENT_URI, SQLdataHelper.KEY_ROWID+"="+invite.getID(), null); 
        ExtraDelete(invite); 
        getSupportLoaderManager().getLoader(0).forceLoad(); 
       } 


      } 
     }); 
    } 


    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) 
    { 
     // Swap the new cursor in. (The framework will take care of closing the 
     // old cursor once we return.) 
     dataAdapter.swapCursor(data); 

    } 

    @Override 
    public void onLoaderReset(Loader<Cursor> loader) 
    { 
     dataAdapter.swapCursor(null); 
    } 

    @Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) 
    { 
     String[] projection = { 
       SQLdataHelper.KEY_ROWID, 
       SQLdataHelper.INVITE_CLIENT_ID, 
       SQLdataHelper.INVITE_CREATION_DATE, 
       SQLdataHelper.INVITE_NAME, 
       SQLdataHelper.INVITE_NOTE, 
       SQLdataHelper.INVITE_REQUESTED_DATE, 
       SQLdataHelper.INVITE_TOTAL_PRICE, 
       SQLdataHelper.INVITE_STATUS 
     }; 
     CursorLoader cursorLoader = new CursorLoader(this, 
       InviteContentProvider.CONTENT_URI, projection, null, null, null); 
     return cursorLoader; 
    } 

업데이트 : 고정 IT. 내 주요 활동에이 방법을 추가했습니다.

@Override 
public void onResume() 
{ 
    super.onResume(); 

    getSupportLoaderManager().getLoader(0).forceLoad(); 
} 
+0

왜 커서를 목록보기 항목으로 저장하고 있습니까? 그리고 왜 당신은'onItemClick()'에서 그것들을 닫고 있습니까? – laalto

+0

커서를 저장하지 마십시오. 이것은 목록보기와 함께 로더 관리자가 작동하는 방법입니다. – user3104022

답변

0

공용 정적 필드를 생성하여 만들 수 있지만 권장하지는 않습니다. 공유 환경 설정에 데이터를 저장 한 다음 원할 때마다 검색 할 수 있습니다.

+0

정적 필드를 만들고 싶지 않습니다. 문제의 원인은 무엇입니까? 그것은 내가 주 활동으로 돌아 오는 방법에 달렸지 만 그 원인은 무엇입니까 – user3104022

+0

문제는 사용되지 않는 모든 변수와 개체를 삭제하는 GC를 제어 할 수 없다는 것입니다. 가장 좋은 방법은 저장하려는 데이터 양에 따라 파일, 공유 환경 설정 또는 데이터베이스에 저장하는 것입니다. – lugonja