我正在使用3个片段A,B,C和Tabhost片段活动
Frag A,B,C每个包含一些只属于一个类的字段。那就是Say Employee类
A包含EMpnm,EmpAge,EmpNo B包含EMpJoinDt,EmpSal C包含EmpHobby,EmpPersonalDtls
导航是使用下一个按钮
的A-> B-> C.Employee类是public .data frm,每个片段使用getter / Setter设置为Employee类 每个片段都有Employee emp = new Employee()对象
因此,每次数据在下一个按钮上消失时,从Frag A到B点击,因此数据dnt由emp对象保存,如何保留片段1到2到3的数据,以便在提交完整的Class员工时最后提交值为DB
是共享首选项的最佳解决方案吗? 这是我的案例的好方法吗?使用捆绑
[链接] Pass data between fragments 注意:每个片段都有相同的类
答案 0 :(得分:3)
SharedPreferences绝对不是一个好的解决方案。它被设计为基本数据类型的键/值数据存储。此外,它应该用于应用程序范围的首选项,而不是缓存业务数据。
最好将公共对象存储在托管所有片段的活动中,并通过onSaveInstanceState/onRestoreInstanceState
机制保存/恢复它。
或者,您可以创建无UI片段来保存共享数据。在初始化其他片段之前,您可以在活动中添加此片段。
然后您可以通过getFragmentManager().findFragmentByTag("YOUR_TAG)
访问此类片段。在这种情况下,您需要在片段中保存对象实例状态,以防止配置更改中的状态丢失。
作为数据持有者的简单活动概念:
public interface EmployeeDataHolder {
EmployeeData getEmployeeData();
}
public class ExampleActivity extends Activity implements EmployeeDataHolder {
private EmployeeData mEmployeeData;
@Override
public EmployeeData getEmployeeData() {
return mEmployeeData;
}
}
public class ExampleFragment extends Fragment{
EmployeeDataHolder mEmployeeDataHolder;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof EmployeeDataHolder) {
mEmployeeDataHolder = (EmployeeDataHolder) activity;
} else
throw new IllegalStateException("Activity must implement EmployeeDataHolder interface");
}
private void yourEmployeeDataProcessingMethod(){
EmployeeData employeeData = mEmployeeDataHolder.getEmployeeData();
// process data, populate views etc.
}
@Override
public void onDetach() {
super.onDetach();
mEmployeeDataHolder = null;
}
}
答案 1 :(得分:0)
共享偏好绝对是一种选择。
更简单,您可以使Employee holder类的字段保持静态。这样,设置为字段的值将保留为通过片段的增量输入数据。
答案 2 :(得分:0)
您应该通过此mViewPager.setCurrentItem(currentPage, true);
更改片段导航
这些数据字段将自动保留。
如果您想访问所有片段数据和字段,可以试试这个。
YourFragment fragment = new YourFragment();
fragment.editText.getText().toString();