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

据我了解,应该在onActivityCreated()中调用LoaderManager.initLoader()函数。在我的特定情况下,我没有片段,因此将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参数传递给加载程序,还是创建另一个将文本作为参数处理的加载程序?

最佳答案

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

例如

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

08-18 16:33
查看更多