我的应用中有3个sherlockListFragments。每个片段都有一些editTexts,最后一个片段有一个按钮,当按下它时,应该访问和存储第一个和第二个片段中的所有数据。 我使用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, 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);
}
}
现在我在第三个片段中有一个null,我该怎么办? 提前致谢
答案 0 :(得分:6)
您的代码失败是正常的。在第一个片段中,您只需创建PersonalDataFragment
的新实例,然后将Bundle
与数据一起传递给它。问题是虽然 fragment 保存了Bundle
中的数据,但该片段本身并不是应用程序所使用的(甚至没有附加到Activity
)。您还在Bundle
实例上设置PersonalDataFragment
,但是您尝试访问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
。