2010-08-11 6 views
0

아주 간단한 덤프 및 표시 응용 프로그램을 만들고 있습니다. 새로 입력 한 데이터가 첫 번째 탭에있는 목록에 표시되는지 확인하고 싶습니다. 하지만 어디 requery() 장소를 모르겠다;다른 탭에서 새 작업을 추가 할 때 목록을 새로 고치려면 어디에서 requery()를 배치해야합니까?

다음은 첫 번째 탭의 코드입니다. (DB에서 데이터를 표시합니다.) 내가 시도

public class ListTask extends ListActivity{ 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.list_task); 
    SQLiteDatabase db = openOrCreateDatabase("db_alist", 0, null); 
    db.execSQL("CREATE TABLE IF NOT EXISTS tbl_alist (_id INTEGER PRIMARY KEY AUTOINCREMENT, task_name VARCHAR, task_date DATE, task_details VARCHAR);"); 
    Cursor c = db.rawQuery("SELECT _id, task_name, task_date FROM tbl_alist", null); 
    while(c.moveToNext()){ 
     c.getString(c.getColumnIndex("task_name")); 
     c.getString(c.getColumnIndex("task_date")); 
    } 
    db.close(); 
    String[] displayfields = new String[] {"task_name", "task_date"}; 
    int[] displayviews = new int[] {android.R.id.text1, android.R.id.text2}; 
    SimpleCursorAdapter sca = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, c, displayfields, displayviews); 
    this.setListAdapter(sca); 
} 
@Override 
public void onResume(){ 
    super.onResume(); 
    System.out.println("Resume?"); 
} 
@Override 
public void onPause(){ 
    super.onPause(); 
    System.out.println("Paused?"); 
}} 

(의사 코드 만)

public class{ 
Cursor c 

public void onCreate(){ 
... 
} 

public void onResume(){ 
super.onResume(); 
c.requery(); 
} 
} 

public class{ 
SimpleCursorAdapter sca 

public void onCreate(){ 
... 
} 

public void onResume(){ 
super.onResume(); 
sca.notifyDataSetChanged(); 
} 
} 

그러나 둘 다 작동하지 않는 일을! 뭔가 잘못되었습니다.

답변

0

나는 onResume()이됩니다.

활동이 표시되기 전에 항상 호출됩니다. 그래서 그것은 논리적 인 장소입니다.

는 멤버 변수와 onResume() 메소드에 SimpleCursorAdapter sca 홍보

+0

커서를 넣으면 c; onCreate() 전에 onResume()에 c.requery()를 넣으면이 탭에 아무 것도로드되지 않습니다. – ice3d

+0

커서를 로컬 변수 대신 클래스 필드로 만들고 싶지 않으면 SimpleCursorAdapter가 있어야합니다. 이 경우 SimpleCursorAdapter에서'notifyDataSetChanged()'를 호출 할 것이다. 상쾌하게 다룰 것입니다. – codinguser

+0

내 SimpleCursorAdapter를 로컬 변수로 넣고 onResume에서 sca.notifyDataSetChanged()를 시도했지만 여전히 아무 일도 일어나지 않았습니다. – ice3d

0

sca.notifyDataSetChanged() 마지막으로 내 자신의 문제를 해결 호출합니다.

onPause()에서 커서를 비활성화하고 onResume에서 다시 쿼리해야했습니다!

그것은했다. : D

0

왜 ContentProvider를 만들지 않습니까? managedQuery 및 ContentProvider를 사용하면 투명하게 나타납니다.

관련 문제