如何通过方向更改来维护已过滤的CursorAdapter的状态?

时间:2015-01-19 21:44:41

标签: java android android-sqlite android-cursoradapter android-cursorloader

我有一个帮助用户组织处方的应用程序。我有一个列表视图显示药物,我使用EditText允许用户过滤列表。我遇到的问题是每次方向改变时都会替换CursorLoader。

据我了解,LoaderManager.initLoader()函数应在onActivityCreated()中调用。在我的特定情况下,我没有片段,因此我将initLoader()调用放在onPostCreate()内:

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    getSupportLoaderManager().initLoader(MEDICATION_LOADER, null, this);
}

这是我正在使用的过滤器:

// Set text filter
mMedication.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        mMedicationAdapter.getFilter().filter(s);
    }
});

我删除了空的beforeTextChanged和afterTextChanged方法来缩短它。

因此,似乎正在发生的事情(使用调试器)是每次我更改设备方向时,再次调用initLoader()并显示整个药物列表,而不仅仅是已过滤的药物。有没有办法实现onSaveInstanceState()来存储适配器的当前过滤状态?

或者我使用文本过滤器错了?我应该将charSequence作为Bundle参数传递给加载器,还是创建另一个将文本作为参数处理的加载器?

2 个答案:

答案 0 :(得分:1)

解决方案是您可以在方向更改时保留当前活动,只需将Activity设置为在AndroidManifest.xml中处理配置更改: Android config changes

e.g。

 <activity
        android:name="com.test.MyActivity"
        android:configChanges="screenSize|orientation"/>

答案 1 :(得分:0)

如果你的edittext是通过布局文件膨胀而且它有一个id;框架应该自动保存其文本。

如果edittext中包含任何文本,您可以在附加textwatcher之前尝试检查,然后过滤您的列表,然后附上您的textwatcher。