如何在android中的片段之间传递值?

时间:2015-03-06 06:56:50

标签: java android android-fragments

  1. 我有4个片段的安卓活动。
  2. 在每个片段中,都有一个文本框,在第4个片段上,存在一个按钮。
  3. 单击该按钮时,不同片段中文本框中显示的所有值(数字)将一起添加并显示为Toast
  4. 注意:片段不能相互通信。(不使用静态变量或片段中的public,并在第4个片段中访问它。)
  5. 现在,我有片段,但我需要知道在这种情况下我应该使用哪种通信技术?

4 个答案:

答案 0 :(得分:0)

我认为你可以这样做的一种方法是通过使用每个片段中的getActivity()来通过活动进行交流,因为它们都共享相同的活动

答案 1 :(得分:0)

您可以将数据存储在MainActivity中,并从以下任何片段中读取:

//MainActivity
private String mItem = "";

public void getItem(){
    return this.mItem;
}

public void addItem(String searchItem){
    this.mItem += searchItem;
}


//FRAGMENT 1
public void onButtonClick(){        
    //adding a string to your item in the MainActivity
    ((MainActivity)getActivity()).addItem("String from Frag1");

}



//FRAGMENT 4
private void onButtonClick{
    //reading the string
    String toastMessage =  ((MainActivity)getActivity()).getItem();
}

答案 2 :(得分:0)

在调用另一个片段之前,只需将代码放在下面:

Bundle bundle=new Bundle();
            bundle.putString("MY_DATA", mStringData);
            mFragment.setArguments(bundle);

在commit()mFragment之后。在第二个片段中,您希望使用以下数据:

String data = getArguments().getStringExtra("MY_DATA");

在您的情况下,另一种方法是,您可以使用SharedPreference 优先保存数据,如:

SharedPreference mPreference=PreferenceManager.getDefaultSharedPreferences(MainActivity.this);

mPreferences.edit()。putString(" MY_DATA",mStringData).commit();

使用另一个片段获取此数据:

String data = mPrefrences().getStringExtra("MY_DATA");

答案 3 :(得分:0)

public interface IAddItem{ public void addItem(int fragID, String value) };

创建此界面并将其实施到您的MainActivity:

    Public class MainActivity extends Activity implements IAddItem{
      private String mValue; 
      public void addItem(int fragID, String value){
         switch(fragID){
           case R.id.frag_1:
            mValue = value;
            break;
           case //Do your other code here
        }
      }

   }

使用它在其他片段中使用它:private IAddItem mCallback;

 @Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    // This makes sure that the container activity has implemented
    // the callback interface. If not, it throws an exception
    try {
        mCallback = (IAddItem) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement IAddItem");
    }
}

并像这样称呼:mCallback.addItem(R.id.frag_1, text.getText().toString());