【问题标题】:How to retain value in second activity after re-clicking the button from MainActivity to launch the second activity?重新单击 MainActivity 中的按钮以启动第二个活动后,如何在第二个活动中保留价值?
【发布时间】:2020-07-30 16:49:22
【问题描述】:

我有 2 项活动。第一个是MainActivity,第二个是SecondActivity

MainActivity 有一个 textViewbutton 称为“启动”。使用intent 和 startActivityForResult 我将一个列表传递给SecondActivity

SecondActivity 有一个spinner 和2 个buttons;一个选择button 和一个cancel 按钮。

spinner 中选择一个项目时,当用户单击Select 按钮时,spinner 中选择的选项将填充到textViewtextView 中。

现在,当用户再次单击“启动”时,SecondActivity 会启动,但 spinner 不会保留用户上次选择的值,而是显示spinner 的第一个值。

无论如何,我如何保留用户在以前使用时选择的SecondActivity 中选择的值。

【问题讨论】:

  • 是的,将微调器的索引保存在某个地方 - 数据库、共享首选项、静态变量、相当多的可用选项
  • 感谢您的回答,下面已经详细阐述了,所以会在这里尝试回答。

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


【解决方案1】:

当你关闭SecondActivity时,你应该将spinner的选择项返回给MainActivity。如果是 MainActiviy 可以在这个函数中获取那个值:

        onActivityResult(int requestCode, int resultCode,  @Nullable Intent data)

在此之前,您应该显示 SecondActivity

       startActivityForResult(intent, SECOND_CODE);

所以代码可以是这样的

        private static SECOND_CODE = 1001;

        Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivityForResult(intent, SECOND_CODE);
                

         @Override
         protected void onActivityResult(int requestCode, int resultCode,  @Nullable Intent data) {
              super.onActivityResult(requestCode, resultCode, data);
              if (requestCode == SECOND_CODE && resultCode == 
                    Activity.RESULT_OK && data != null) {
                 // you can get selected spinner item here
              }
          }

之后,当你想再次显示 SecondActivity 时

        Intent intent = new Intent(MainActivity.thisSecondActivity.class); 
        intent.putExtra("selected_spinner", /*the spinner item you got from above function*/)
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivityForResult(intent, SECOND_CODE);

在SecondActivity中,可以通过getIntent()获取选中的spinner项

        String selected_spinner = getIntent().getStringExtra("selected_spinner");

然后你就可以在 Spinner 中找到这个字符串并选中它。

【讨论】:

  • 哇,谢谢,这太棒了伙计!但是,由于我有几个按钮,并且我使用相同的功能为每个按钮打开 activities,所以我删除了 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);,因为这会导致崩溃。休息是一种魅力。我只是认为有一种方法可以为第二次活动保留会话数据,但是重新捕获选定的数据非常明显,但是您的代码使它变得超级简单!谢谢!
  • 你应该添加这个代码:intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);删除它可能会导致超过 Android 版本 9 的崩溃
  • 不幸的是,如果我添加 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);,我会崩溃。那时我将其删除,我想要的输出即将到来。任何解释为什么?
【解决方案2】:

您可以使用 SharedPreferences 持久化信息,只需存储用户的最后选择,然后检索它以在 SecondActivity 上设置。

Context context = getActivity();
SharedPreferences prefs = context.getSharedPreferences(
        getString("myPreferences"), Context.MODE_PRIVATE);

//Store a value
SharedPreferences.Editor editor = prefs.edit();
editor.putString("selection","foo");

//Get the value
String selection = prefs.getString("selection", "defaultOption");

这里是官方文档:https://developer.android.com/training/data-storage/shared-preferences

【讨论】:

  • 谢谢,我试试看。
猜你喜欢
  • 1970-01-01
  • 2015-05-26
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多