我有一个用于编辑项目的片段。我用加载器加载所有数据然后让用户编辑它。问题是,当用户在EditText
中输入一些数据然后旋转设备时,加载程序会重新加载数据并覆盖用户所做的所有更改。当然,当我注释掉initLoader()
时,旋转后会保留EditText值。
在方向改变后停止重新加载装载机的常见模式是什么?我能提出的最简单的解决方案是将一些标志变量放入onSaveInstanceState()
并在onLoadFinished()
中添加if语句以不重新加载数据,但我想知道是否有更好的解决方案。以下是我的片段中的简化代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_add_edit_project, container, false);
this.projectAddressInput = (EditText) view.findViewById(R.id.fragment_add_edit_project_address);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader onCreateLoader(int id, Bundle args) {
return new CursorLoader(
getActivity(),
Project.buildProjectUri(this.projectId),
PROJECTION,
null,
null,
null
);
}
@Override
public void onLoadFinished(Loader loader, Object data) {
Cursor cursor = (Cursor) data;
if (cursor != null && cursor.moveToFirst()) {
this.projectAddressInput.setText(cursor.getString(cursor.getColumnIndex(Project.COLUMN_ADDRESS)));
}
}
@Override
public void onLoaderReset(Loader loader) {}
任何建议都非常感谢。
答案 0 :(得分:1)
在android:configChanges
中声明AndroidManifest.xml
,指示活动管理器不要重新启动您更改配置的活动(因此会重新加载CursorLoader
):
<activity
...
android:configChanges="orientation|screenSize" />
如果您的应用程序在特定配置更改期间不需要更新资源,并且您有性能限制要求您避免重新启动活动,那么您可以声明您的活动自己处理配置更改,这会阻止系统从重新开始你的活动。
参考:http://developer.android.com/guide/topics/resources/runtime-changes.html