【问题标题】:How to send data from Activity to Fragment?(Android)如何将数据从 Activity 发送到 Fragment?(Android)
【发布时间】:2020-12-16 12:47:06
【问题描述】:

我想利用片段内的活动中的一些 TextViews(cityField, updatedField)。 我知道在活动中使用它们会更容易,但问题是由于获取了一些 JSON 数据,我必须加入 Fragment 上的一些代码

我已经获得了活动代码的 ID

cityField = findViewById(R.id.textView4);
updatedField = findViewById(R.id.textView9);

现在我想在我的片段中使用它们 所以问题是——有可能吗?如果可以,怎么做?

我已经在这个网站上检查了一些答案 - Send data from activity to fragment in Android How to pass data from Activity to Fragment using bundle

但他们直接没有解决我的问题。

【问题讨论】:

  • 您好,只是为了确认一下。您的问题是将数据从片段发送到活动?然后用这些数据你可以改变'cityField'和'updatedField'的值吗?
  • 本教程可以帮你做到这一点medium.com/@gunayadem.dev/…

标签: android android-studio android-fragments android-activity textview


【解决方案1】:

您应该创建一个SharedViewModel 并让Activity 设置变量的值,如cityField 和updateField 而Fragment Observe 对它们所做的更改,基本上Activity 将@987654329 @ 和 Fragment 将 Get

有关ViewModels 的更多信息,请查看: https://developer.android.com/topic/libraries/architecture/viewmodel

【讨论】:

    【解决方案2】:

    您可以像这样从片段中访问这些实例:

    String cityFieldFragment = (activity as YourActivity).cityField;

    String updatedFieldFragment = (activity as YourActivity).updatedField;

    如果我理解正确,片段存在于您的活动中,因此您可以从中访问数据,只需确保实例是公开的。

    【讨论】:

    • 谢谢,我在片段中试过了,但没有用
    • downvoted,有一个需要片段的对象来调用方法,而它会工作,它会导致应用程序的生命周期出现太多问题,ViewModel 是最好的方法,虽然它是稍微先进。
    【解决方案3】:

    如果片段尚未创建,您可以使用片段的构造函数并将参数传递给它。 如果 Fragment 已经创建,请在 Fragment 内部创建一个方法并在 Activity 中调用它。

    【讨论】:

    • 在 BWappsandmore 的回答中阅读相同的评论
    【解决方案4】:

    假设您想将它从一个活动传递到另一个包含片段的活动。首先,您需要像这样传递数据:

    Intent intent = new Intent();
                        intent.setClass(FirstActivity.this, SecondActivity.class);
                        intent.putExtra("name", username);
                        intent.putExtra("pass", password);
                        startActivity(intent);
    

    在这种情况下,片段位于 SecondActivity.java 内,但要接收数据,我们需要 Fragment.java 内的代码,而不是 SecondActivity.java。

    Bundle extras = getActivity().getIntent().getExtras();
            if (extras != null) {
                getUsername = extras.getString("name");
                getPassword = extras.getString("pass");
            }
    

    我没有尝试将数据直接传递给片段,但您可以尝试使用相同的代码。您需要做的就是将 intent 而不是 intent.setClass(FirstActivity.this, SecondActivity.class); 更改为 intent.setClass(FirstActivity.this, Fragment.class);。

    【讨论】:

      【解决方案5】:

      您是否尝试过 SharedPreferences?

      在你的 MainActivity 中

      // create sharedPrefences file with the name "info"
      SharedPreferences sp = this.getSharedPreferences("info",0);
      // here the name and default value
      sp.getString("name", "default value");
      // create editor
      SharedPreferences.Editor editor = sp.edit();
      // enter a new value
      editor.putString("name", "new value");
      // save changes
      editor.apply();
      

      在你的片段中

      SharedPreferences sp = getActivity().getSharedPreferences("info",0);
      String str = sp.getString("name", "default value"); //will get you the new value you entered
      

      【讨论】:

        猜你喜欢
        • 2013-09-27
        • 2021-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-14
        • 1970-01-01
        相关资源
        最近更新 更多