当前位置: 代码迷 >> Android >> 从另一个活动更改后,android更新活动textview
  详细解决方案

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

热度:106   发布时间:2023-08-04 12:14:25.0

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

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

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

有人可以告诉我执行此操作的最佳方法吗? 到目前为止,我发现的唯一解决方案与广播接收器有关,但是我不确定这是否最适合我的工作。

我将不胜感激任何建议。 谢谢!

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

BroadcastReceiver是一件好事,但为这样简单的任务付出的努力并不值得。

你可以做:

@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。

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

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

只要确保它在您的处理程序方法中即可。

  相关解决方案