我想利用片段中活动中的一些TextViews(cityField,updatedField(。我知道在活动中使用它们会更容易,但问题是,由于获得了一些JSON数据,我不得不加入Fragment上的一些代码
我已经得到了活动上代码的id
cityField = findViewById(R.id.textView4);
updatedField = findViewById(R.id.textView9);
现在我想在我的碎片中使用它们所以问题是——这可能吗?如果可能的话,怎么做?
我已经在这个网站上检查了一些答案-在Android中将数据从活动发送到片段如何使用捆绑将数据从活动传递到片段
但他们并没有直接解决我的问题。
您应该创建一个SharedViewModel
,并让Activity
设置cityField
和updateField
等变量的值,而Fragment
Observe
设置对它们所做的更改,基本上Activity
将Set
和Fragment
将Get
有关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");
}
我还没有尝试将数据直接传递到片段,但您可以尝试使用相同的代码。您所需要做的就是将intent
从intent.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