【问题标题】:How do I track if activity has ended Android Studio如何跟踪活动是否已结束 Android Studio
【发布时间】:2021-10-03 00:00:09
【问题描述】:

我有一个在我的应用程序中向数据库添加对象的活动,并且数据库显示在调用AddActivity 的活动中。我的问题是更新数据库后需要刷新 ArrayList,但我无法在我的AddActivity 中访问它。所以我想在AddActivity结束时跟踪MainActivity,然后调用刷新function。现在我尝试使用下面的代码,这是可行的,但我认为这不是我应该这样做的方式,我觉得有更好的功能,但我找不到。

onClickListener内MainActivity中的代码:

Intent intent = new Intent(mContext, ExerciseAdd.class);
startActivityForResult(intent, 1);

AddActivity 中的代码也在 onClickListener 中:

dataBaseAccess = ExercisesDataBaseAccess.getInstance(getApplicationContext());
                dataBaseAccess.open();
                dataBaseAccess.addExercise(nameString, typeString, "NULL");
                dataBaseAccess.close();

                Intent intent = new Intent();
                intent.putExtra("result", 1);
                setResult(1, intent);
                finish();

以及MainActivity中的refhresing函数:

 @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);
        dataBaseAccess.open();
        exercises = dataBaseAccess.getAllExercises();
        dataBaseAccess.close();
        adapter.setExercises(exercises);
        adapter.notifyDataSetChanged();
    }

或者也许有什么方法可以将对ArrayList 的引用传递给AddActivity?我很难找到有关此的任何信息

【问题讨论】:

  • 删除了 android-studio 标签,因为该标签用于处理与 Android Studio 产品相关的问题。您的问题是一个通用的 Android 问题,与 Android Studio 产品无关。

标签: java android database android-intent android-activity


【解决方案1】:

您的做法是最稳健、最干净的方式。您将数据存储在数据库中,并且有一个 Activity 将项目添加到数据库中,另一个 Activity 从数据库中读取数据并显示它。这看起来有点矫枉过正,但这种架构比在活动之间共享内存中的数据更健壮。

当然,活动之间可以共享内存中的数据。您可以将ArrayList<Exercise> 的引用存储在public static 变量中,并且两个活动都可以访问它。这是一种共享数据的简单方法,但如果您的应用程序进入后台并且 Andriod 终止了托管应用程序的操作系统进程,然后用户返回到应用程序,则可能会很棘手。如果他上次使用AddActivity,当他返回应用程序时,Android 将创建一个新的操作系统进程来托管应用程序并实例化AddActivity,但MainActivity 尚未实例化,您共享的public static 数据会消失的。所以这种方法容易出错。

另一种方法是使用实​​时数据。这是在活动之间共享内存中数据的更复杂的方法。您可以在此处阅读有关实时数据的更多信息:https://developer.android.com/topic/libraries/architecture/livedata

【讨论】:

  • 谢谢,这对我很有帮助
  • 如果答案有帮助,您应该点击答案旁边的绿色复选标记接受它。这会给我一些声誉积分,提高你的接受率,也可以帮助其他可能有类似问题的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多