我有一个可以帮助用户组织处方的应用程序。我有一个显示药物的列表视图,并且使用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"/>