从片段A转移数据 - >片段B - >片段C.当用户单击“返回”按钮时,我想返回片段A和数据

时间:2017-04-03 02:48:30

标签: android fragment transfer

我是Android开发人员的新手。我有一个关于转移3个片段的问题。

我有3个片段(A - B - C)。我想要从A - >转移数据。 B - > C.
在每个片段中,数据已被更改。 当用户单击BACK BUTTON时,用户希望返回包含更新数据的A. 如何使用更新数据返回片段A? 感谢。

3 个答案:

答案 0 :(得分:0)

使用界面来实现这一目标。在片段和活动中实现接口,因为它是通过活动在片段之间进行通信的好方法。然后通过接口发送数据并从中提取数据。

答案 1 :(得分:0)

  1. 您可以使用Interface类在片段之间进行通信,但必须确保所有片段都处于活动状态。

  2. 您可以使用SharedPreferences保存数据并在任意位置检索数据

答案 2 :(得分:0)

以下是如何实现沟通的示例。

 // activity classs
 public class SampleActivity extends Activity implements    OnFragmentChangeListener {
 OnBackPressListener  dataFragment;
 public void onCreate(bundle){

      android.app.FragmentManager fragmentManager=getFragmentManager();

    android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    dataFragment = new DataFragment();
    fragmentTransaction.add(R.id.audio_permission_button,dataFragment);
    fragmentTransaction.commit()
 }
  @override
  public void OnFragmentChange(Bundle bundle){
  //here you go.
  // write code to load new fragment with same idea. now you have bundle do what you want.

}
@Override
public void onBackPressed() {
 // you can call this method from any click event, This just an sample idea.
 dataFragment.OnActivityBackPress();
}

}
 // interface to communicate with fragment
 public interface OnFragmentChangeListener {
     public void OnFragmentChange()
 }
 // fragment class
public class DataFragment extends Fragment implements OnBackPressListener {

 OnFragmentChangeListener onFragmentChangeListener;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 onFragmentChangeListener=(OnFragmentChangeListener) getActivity();


}

    @Override
public void OnActivityBackPress() {
 // pass you data to activity for loading new fragment or to refresh data.
 Bundle bundle= new Bundle();

 onFragmentChangeListener.OnFragmentChange(bundle);



}
}

// interface behave like mediator 
public interface OnBackPressListener {

public void OnActivtiyBackPress();
}