如何将数据从活动发送到片段?(安卓系统)



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

我已经得到了活动上代码的id

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

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

我已经在这个网站上检查了一些答案-在Android中将数据从活动发送到片段如何使用捆绑将数据从活动传递到片段

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

您应该创建一个SharedViewModel,并让Activity设置cityFieldupdateField等变量的值,而FragmentObserve设置对它们所做的更改,基本上ActivitySetFragmentGet

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

您可以从您的片段中访问这些实例,如下所示:

String cityFieldFragment = (activity as YourActivity).cityField;

String updatedFieldFragment = (activity as YourActivity).updatedField;

如果我理解这一点,那么片段就存在于您的活动中,因此您可以从中访问数据,只需确保实例是公共的。

如果片段尚未创建,则可以使用片段的构造函数并向其传递参数。如果片段已经创建,请在片段内创建一个方法,并在活动中调用它。

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

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");
}

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

您是否尝试过SharedPreferences

在您的主要活动

// 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

最新更新