2011-10-26 1 views
4

는 내가 커서 객체에 close()를 메서드를 호출 할 때 왜 그 빈 목록보기을 내 ListActivity 및 해당되는 이해에 문제가? ListView에 빈()

나 자신에게 조금 설명하게

...

은 내가 DB에서 일부 값을 retreive 내 커서 객체의 결과를 얻을. 그 후 내 SimpleCursorAdapter을 만들고 데이터베이스의 열을 내 의 필드로 바인딩합니다. listView. 내가 에서 onCreate() 방법 내 목록보기의 끝에서 cursor.close()를 호출하면

매력처럼 작동하지만 ...

는 빈 표시됩니다?

내가 cursor.close()하고 완벽 의미가 호출 될 때까지 그들이 거기 커서에서 로그 캣에 값을 기록하면,하지만 cursor.close()를 호출 할 때 왜 listAdapter은 비워 ?? ? 나는

왜 그렇게입니다 ... 목록보기 우리 활동이 파괴 될 때까지에 "바인더 제본"되는 값을 유지하기 ListAdapter listAdapter = 새로운 SimpleCursorAdapter (...)을 기대? 언제 그리고 왜 커서를 닫아야합니까?

public class ListTrainingsView extends ListActivity{ 
private SQLiteDatabase db; 
private ListAdapter listAdapter; 
private Cursor cursor; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_trainings); 

    DatabaseHelper helper = new DatabaseHelper(this); 

    this.db = helper.getWritableDatabase(); 

    this.cursor = db.query("trainings", fields, null, null, null, null, null); 

    startManagingCursor(cursor); 

    this.listAdapter = new SimpleCursorAdapter(this, 
      R.layout.list_trainings_item, 
      cursor, 
      new String[] {"name"}, 
      new int[] { R.id.name_entry} 
    ); 

    this.setListAdapter(this.listAdapter); 

//If I call 
//cursor.close(); 
//shown list is empty 

또 다른 질문은 질문의 기본 Java 언어 유형의 더 ... 나는 PHP 각종 배경에서 와서 당신이 멤버 변수를 정의하면 거기 당신은 구문 $ this-를 사용하여 객체 메소드에서 함께 일해야> 커서. 나는 Android/Java에서 this.cursor.getCount()을 사용하여 참조/값을 가져올 필요가 없다는 것을 알아 냈습니다. 그것은 말하기 충분하다 cursor.getCount() 어떻게 이것이 허용됩니까?

답변

1

왜 이렇게 되나요? 에서

Adapter 요구 데이터 Cursor를 제공하고 그에 따라 ListView을 준비하고 cursor.close()를 호출 할 때 Cursor 해제 및 무효가된다. (데이터가 없음을 의미)

언제 커서를 닫아야합니까?당신이 떠나려고하는 동안

그것은 Cursor를 닫 필요하다 Activity 다시 다른 CursorActivity에 대한 유출당한 Activity에서 것이다. documentation

  • 에서

    • 참조는 모든 IT 그것은 말할 충분 necessary

    이유 cursor.getCount() 어떻게 이런 일이 허용됩니다 와서?

    Java 구조는 클래스를 기반으로합니다. 모든 작업은 특정 클래스 내에서 수행됩니다. "단일 회선"이라고 표시된 경우에도 수업이 필요합니다. 당신이 클래스에있을 때 더 here

  • 를 참조하십시오 당신은 직접 자신의 변수

    • this또는와 클래스 멤버에 액세스 할 수 있습니다
    2

    CursorAdapter를 구현하면 항목을 다시 쿼리하고 필터링 할 수 있기 때문에 커서가 닫히면 작업이 파괴됩니다 (즉, onDestroy()).

    어쨌든 startManagingCursor (으)로 전화하고 있기 때문에, 활동은 자동으로 비활성화되고, 재검사하고, 적절한 활동주기 이벤트에 따라 커서를 닫습니다. 따라서 직접 닫을 필요가 없습니다.