繁体   English   中英

在Fragment中使用MainActivity中的值

[英]using values from MainActivity in Fragment

我的应用程序具有一个带有三个片段的bottomNavigationBar。 我的MainActivity包含一个CollapsingToolbar,其中包含一个RadioGroup。 现在,我在MainActivity中获得了选定的RadioButton的值,但是我需要在第一个片段中使用它的值。 我怎么做? 每个片段都包含其自己的CollapsingToolbar还是活动之间传递数据?

  1. 您可以使用片段的setArguments(Bundle)方法,其中Bundle具有已设置的键值对。 例如,您的片段对象是yourFragment那么您有

     Bundle bundle = new Bundle(); bundle.putString("paramKey", "paramVal"); yourFragment.setArguments(bundle); 
  2. 在片段的onCreateView(LayoutInflater, ViewGroup, Bundle) ,可以使用getArguments()方法访问信息。

     String value = getArguments().getString("paramKey"); // value = "paramVal" // inflate, return 

请参阅文档 ,以获取有关设置包值的更多信息。

您可以使用想要传递给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类。 您将能够在该类的所有实例中设置并获取这些变量的值。

也可以使用这样的Java接口来实现

  1. 在Activity类中定义一个接口。 在提交片段时捕获接口实例,该片段随后将用于将数据发送到片段

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

 }
  1. 在您的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 } 

    }

希望这可以帮助。

您可以在活动类可见的片段中创建一个方法。 然后,使用此方法,可以传递值。 并且在实现此功能时,您可以进行所需的更改,例如片段中的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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM