使用束片段之间的数据传递给另一个片段例如(using bundle to pass data bet

2019-09-02 15:07发布

我在我的应用程序3个sherlockListFragments。 每个片段都有一些editTexts最后片段有一个当它压在第一和第二片段的所有数据应该被访问和保存按钮。 我用束片段之间发送数据。 用简单的以下示例中,这是我的第一片段的代码:

public class PersonalDataFragment extends SherlockListFragment {


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragmet_personal_data, container, false);

    return v;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    PersonalDataFragment fragment = new PersonalDataFragment();
    Bundle bundle = new Bundle();
    bundle.putString("y", "koko"); //any string to be sent
    fragment.setArguments(bundle);

    super.onCreate(savedInstanceState);
}

},这是接收文本片段的代码:

public class WorkExpRefFragment extends SherlockListFragment  {
String myInt;

@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_workexp_ref, container, false);


    final EditText t = (EditText) view.findViewById(R.id.editText5);
    final Button generate = (Button)view.findViewById(R.id.button2);

    generate.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            t.setText(myInt + "sadfigha");
        }
    });
    return view;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    Bundle bundle = this.getArguments();
    if(getArguments()!=null) {
        myInt = getArguments().getString("y");
    }

    super.onCreate(savedInstanceState);
}

}

现在我有一个空的第三个片段,我应该怎么办? 提前致谢

Answer 1:

这是正常的,你的代码失败。 在第一个片段你要做的就是创建一个新的实例PersonalDataFragment和你传递一个Bundle的数据。 的问题是,虽然片段保持在所述数据Bundle ,片段本身不是由应用(甚至没有附接至所使用的Activity )。 您还可以设置BundlePersonalDataFragment实例,但您尝试访问的数据WorkExpRefFragment会随着两个片段没有直接连接明显不行。

一个简单的,你想做什么解决办法是让Activity “拯救”你的碎片数据作为Activity适用于所有碎片。 首先创建两个方法Activity拿着三个片段:

public void saveData(int id, Bundle data) {
    // based on the id you'll know which fragment is trying to save data(see below)
    // the Bundle will hold the data
}

public Bundle getSavedData() {
    // here you'll save the data previously retrieved from the fragments and
    // return it in a Bundle
} 

然后,你的碎片将挽救他们的数据是这样的:

public class PersonalDataFragment extends SherlockListFragment {

   // this will identify the PersonalDataFragment fragment when trying to save data 
   public void static int id PERSONAL_ID = 1; 
   //...

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      Bundle bundle = new Bundle();
      bundle.putString("y", "koko"); //any string to be sent
      YourActivity activity = (YourActivity) getActivity();
      activity.saveData(PERSONAL_ID, bundle);
   }    
}

要检索的数据WorkExpRefFragment片段:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    YourActivity activity = (YourActivity) getActivity();
    Bundle savedData = activity.getSavedData();
}

这取决于你如何使用这些片段这种解决方案可能无法正常工作。 另外,请记住, Bundle你通过像上面将不会被保留的配置变化。



文章来源: using bundle to pass data between fragment to another fragment example