如何通过方向更改来维护过滤后的 CursorAdapter 的状态?
How to maintain state of filtered CursorAdapter through orientation changes?
我有一个应用程序可以帮助用户整理处方。我有一个显示药物的列表视图,我使用 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 参数传递给加载器,还是创建另一个加载器将文本作为参数处理?
如果您的 edittext 是通过布局文件扩充的并且它有一个 id;该框架应该会自动保存其文本。
您可以尝试在附加 textwatcher 之前检查,如果 edittext 中有任何文本,然后过滤您的列表,然后附加您的 textwatcher。
一个解决方案是当方向改变时你可以保持当前 activity,只需设置 Activity 来处理 AndroidManifest.xml 中的配置变化:
Android config changes
例如
<activity
android:name="com.test.MyActivity"
android:configChanges="screenSize|orientation"/>
我有一个应用程序可以帮助用户整理处方。我有一个显示药物的列表视图,我使用 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 参数传递给加载器,还是创建另一个加载器将文本作为参数处理?
如果您的 edittext 是通过布局文件扩充的并且它有一个 id;该框架应该会自动保存其文本。
您可以尝试在附加 textwatcher 之前检查,如果 edittext 中有任何文本,然后过滤您的列表,然后附加您的 textwatcher。
一个解决方案是当方向改变时你可以保持当前 activity,只需设置 Activity 来处理 AndroidManifest.xml 中的配置变化: Android config changes
例如
<activity
android:name="com.test.MyActivity"
android:configChanges="screenSize|orientation"/>