问题描述
我有一个Android活动,onCreate()将查询数据库并在UI的textviews中显示查询结果。
我遇到的问题是在某个时候,用户可以打开另一个活动并更新数据库。 当他们返回原始活动时,我希望文本视图使用新的数据库信息进行更新(因此,我将重新查询数据库并显示信息)。
我愿意做的另一件事是(在新活动中)从用户那里获取新的输入,并直接更新现有活动中的textview(而无需让现有活动重新查询数据库)。 但是我也不知道该怎么做。
有人可以告诉我执行此操作的最佳方法吗? 到目前为止,我发现的唯一解决方案与广播接收器有关,但是我不确定这是否最适合我的工作。
我将不胜感激任何建议。 谢谢!
1楼
如果要在列表视图中显示的数据量不大,则最简单的解决方案是使用onResume()方法在数据库中重新查询。 当活动再次向用户显示时,始终会调用此方法。
BroadcastReceiver是一件好事,但为这样简单的任务付出的努力并不值得。
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。
3楼
如果您在onResume中使用setText,则仍然需要通过处理程序刷新/重画。 我发现最简单的方法是重新绘制基本布局视图。
LinearLayout myBaseLayout = (LinearLayout)findViewById(R.id.linearlayout01);
myBaseLayout.invalidate();
只要确保它在您的处理程序方法中即可。