2010-08-11 17 views
0

我正在制作一个非常简单的转储和显示应用程序。我希望看到我的新输入的数据显示在第一个标签上的列表中。但我不知道在哪里放置requery();当我从另一个选项卡添加新任务时,我会在哪里放置requery()以刷新列表?

这是第一个选项卡的代码。 (显示从数据库中的数据。)

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()会做。

在活动变得可见之前,总是立即调用它。所以这是合乎逻辑的地方。

促进SimpleCursorAdapter sca一个成员变量和的onResume()方法,调用sca.notifyDataSetChanged()

+0

如果我把Cursor c;在onCreate()之前,并在onResume()中放入c.requery(),该选项卡不会加载任何东西! – ice3d 2010-08-11 14:37:51

+0

如果你不想让游标成为类字段而不是本地变量,那么你的SimpleCursorAdapter应该是。在这种情况下,你将在你的SimpleCursorAdapter上调用'notifyDataSetChanged()'。它会处理令人耳目一新的。 – codinguser 2010-08-11 15:09:29

+0

试图将我的SimpleCursorAdapter作为局部变量,并在onResume中放入sca.notifyDataSetChanged(),但仍然没有任何反应。 – ice3d 2010-08-11 15:20:38

0

终于解决了我自己的问题。

我需要停用onPause()中的游标,然后在onResume中调用requery!

它工作。 :D

0

你为什么不创建一个ContentProvider?使用managedQuery和ContentProvider,它将是透明的

相关问题