我想在4个不同的片段之间共享一个String值。 如果我在一个片段中更改一个值,我想将此值发送给其他片段。
我该怎么做?
我唯一知道的是,在一个片段中我可以更改像
这样的TextViewString newValue = "New Text";
View v = inflater.inflate(R.layout.fragment_one, container, false);
Textview tv = (Textview) v.findViewById(R.id.textview_from_fragment_one);
tv.setText(newValue);
但是如何发送newValue e.G.片段fragment_two和fragment_three?
答案 0 :(得分:2)
我建议您使用EventBus库,here是如何开始使用EventBus的教程。
此外,您可以使用带有this教程的RxJava实现此目的。
但如果您不想使用任何库,那么:
首先创建如下界面:
public interface Data {
void dataChanged(String changedString);
}
在所有片段中实现此界面,如下所示:
public class FirstFragment extends Fragment implements Data {
...
@Override
public void dataChanged(String changedString){
// In this method you'll receive the changed string value
}
}
在您的活动中创建一个方法,如下所示:
public void changeData(String changedData){
// Notify your first fragment
Data data = myFirstFragment;
data.dataChanged(changedData);
// Notify your second fragment
data = mySecondFragment;
data.dataChanged(changedData);
// Other fragments
...
}
每当您更改该字符串值时,请通知其他类似的片段:
// Call this inside your fragment
((YourActivity)getActivity()).changeData(CHANGED_VALUE);
答案 1 :(得分:0)
您可以使用Bundle:
String newValue = "New Text";
Bundle bundle = new Bundle();
// you can put as much fragments as you want
NewFragment fragment = new NewFragment();
SecondFragment fragment_two = new SecondFragment();
ThirdFragment fragment_three = new ThirdFragment();
bundle.putString("some_tag", newValue );
fragment.setArguments(bundle);
fragment_two.setArguments(bundle);
fragment_three.setArguments(bundle);
在您设置为具有此值的任何片段中添加以下内容:
if (bundle != null)
{
String newValue = getArguments().getString("some_tag");
}
答案 2 :(得分:0)
您可以使用Bundle,例如(在启动活动中添加额外的)片段:
在活动中调用Fragment:
Fragment fragment = new ExampleFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Bundle bundle = new Bundle();
bundle.putString("key", "TEST");
fragment.setArguments(bundle);
transaction.replace(R.id.frame , fragment);
transaction.commit();
在Fragment中将它放在onViewCreated():
中 String exampleString;
Bundle bundle = this.getArguments();
if (bundle != null) {
exampleString = bundle.getString("key", "");
Toast.makeText(getActivity() , exampleString , Toast.LENGTH_SHORT).show();
注意:在活动中使用Interface for call methode替换片段。