我的应用程序中有3个sherlockListFragments.每个片段都有一些editTexts,最后一个片段有一个按钮,当按下它时,应该访问和存储第一个和第二个片段中的所有数据.
我使用bundle在片段之间发送数据.用以下简单的例子,
这是我的第一个片段的代码:
我使用bundle在片段之间发送数据.用以下简单的例子,
这是我的第一个片段的代码:
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,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_workexp_ref,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); }
}
现在我在第三个片段中有一个null,我该怎么办?
提前致谢
解决方法
您的代码失败是正常的.在第一个片段中,您所做的就是创建一个PersonalDataFragment的新实例,并将其与数据一起传递给Bundle.问题是虽然片段保存了Bundle中的数据,但片段本身并不是应用程序使用的片段(甚至没有附加到Activity).您还在PersonalDataFragment实例上设置了Bundle,但是您尝试访问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不会保留用于配置更改.