我的应用程序有一个带有三个片段的bottomNavigationBar。我的MainActivity包含一个CollapsingToolbar,其中包含一个RadioGroup。现在,我在MainActivity中获得了选定的RadioButton的值,但是我需要在第一个片段中使用它的值。我怎么做?每个片段都包含自己的CollapsingToolbar还是活动之间传递数据?
答案 0 :(得分:4)
您可以使用片段的setArguments(Bundle)
方法,其中Bundle
具有已设置的键值对。例如,您的片段对象是yourFragment
,那么您有
Bundle bundle = new Bundle();
bundle.putString("paramKey", "paramVal");
yourFragment.setArguments(bundle);
在片段的onCreateView(LayoutInflater, ViewGroup, Bundle)
中,您可以使用getArguments()
方法访问信息。
String value = getArguments().getString("paramKey"); // value = "paramVal"
// inflate, return
有关documentation的更多信息,请参见设置束值。
答案 1 :(得分:1)
您可以使用SharedPreferences
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor edit = prefs.edit();
edit.putString("some_key",someValue); //someValue is a var that containns the value that you want to pass
edit.commit();
然后在您的片段中,访问值:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String value = prefs.getString("some_key","default_value");
创建一个包含所有静态变量的Utility类。您将能够在该类的所有实例中设置并获取这些变量的值
答案 2 :(得分:1)
这也可以使用Java interfaces来实现
。
class ExampleActivity extends Activity {
//Data listener to be implemented by the fragment class
public interface OnDataListerner{
public void sendData(ArrayList<String> data);
}
//DataListener instance to be captured while committing fragment
OnDataListener fragment;
//commit your fragment and type cast it to OnDataListener
private void commit Fragment(){
fragment = new ExampleFragment();
FragmentTransaction transaction =
getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, exampleFragment);
transaction.addToBackStack(null);
transaction.commit();
}
//used to send data through interface methods which will be defined in fragment
public void sendDataToFragment(){
fragment.sendData(Your data to be send);
}
}
已在Fragment类中实现了此接口,一旦Acitivity在此接口上调用了任何方法,它将在此Fragment中被调用
公共类ExampleFragment扩展Fragment实现ExampleActivity.OnDataListerner {
//interface callback which is called when Activity call its method.
public void sendData(ArrayList<String> data){
//Here is your data which can be consumed
}
}
希望这会有所帮助。
答案 3 :(得分:0)
您可以在活动类可见的片段中创建一个方法。然后,使用此方法,可以传递值。并且在实现此功能时,您可以进行所需的更改,例如片段中的UI更新。
例如-
MainActivity.java
// in member declarations
private MyFragment frag;
private CentralFragment cFrag;
// initialize the fragment
frag = new MyFragment(args);
cFrag = new CentralFragment(otherArgs);
// onRadioButtonClicked -> assuming selected value = v
frag.onChoice(v);
cFrag.onChoice(v);
MyFragment.java
public void onChoice(Type arg) {
// use the value
someTextView.setText(arg);
}
CentralFragment.java
public void onChoice(Type arg) {
// use the value
otherTextView.set(arg);
}