从另一个活动更改后的android更新活动textview

时间:2010-11-19 16:58:06

标签: java android user-interface android-activity textview

我有一个Android活动,onCreate()将查询数据库并在UI上的textview中显示查询结果。

我遇到的问题是,用户可以打开另一个活动并更新数据库。当他们回到原始活动时,我希望文本视图能够使用新的数据库信息进行更新(因此,我将重新查询数据库并显示信息)。

我愿意做的另一件事是从用户那里获取新输入(在新活动中)并直接更新现有活动中的textview(不需要现有活动重新查询数据库)。但是我不知道怎么做这样的事情。

有人可以告诉我最好的方法吗?到目前为止,我发现的唯一解决方案与广播接收器有关,但我不确定这是否最适合我必须做的事情。

我很感激任何建议。谢谢!

3 个答案:

答案 0 :(得分:3)

如果要在列表视图中显示的数据量不大,最简单的解决方案就是在onResume()方法中重新查询数据库。当活动再次显示给用户时,始终会调用此方法。

BroadcastReceiver是一件好事,但努力不值得这么简单的任务。

答案 1 :(得分:2)

你可以这样做:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    db.beginTransaction();
    Cursor cur = null;
    try {
       cur = db.query("table", 
            null, null, null, null, null, null);
       cur.moveToPosition(0);
       String titleString = cur.getString(cur.getColumnIndex("title"));
       db.setTransactionSuccessful();
     } catch (Exception e) {
       Log.e("Error in transaction", e.toString());
     } finally {
       db.endTransaction();
       cur.close();
     }
 }

交易真的很快。 您可以使用onResume()方法来填充Textview。

答案 2 :(得分:0)

如果你在onResume中使用setText,你仍然需要通过处理程序刷新/重绘。我发现最简单的方法是重绘基本布局视图。

LinearLayout myBaseLayout = (LinearLayout)findViewById(R.id.linearlayout01);
myBaseLayout.invalidate();

确保它在你的处理程序方法中。