在方向更改后使用装载程序时保留EditText会发生更改

时间:2015-02-28 05:24:23

标签: android loader orientation-changes

我有一个用于编辑项目的片段。我用加载器加载所有数据然后让用户编辑它。问题是,当用户在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) {}

任何建议都非常感谢。

1 个答案:

答案 0 :(得分:1)

android:configChanges中声明AndroidManifest.xml,指示活动管理器不要重新启动您更改配置的活动(因此会重新加载CursorLoader):

<activity
    ...
    android:configChanges="orientation|screenSize" />
  

如果您的应用程序在特定配置更改期间不需要更新资源,并且您有性能限制要求您避免重新启动活动,那么您可以声明您的活动自己处理配置更改,这会阻止系统从重新开始你的活动。

参考:http://developer.android.com/guide/topics/resources/runtime-changes.html