我有一个帮助用户组织处方的应用程序。我有一个列表视图显示药物,我使用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参数传递给加载器,还是创建另一个将文本作为参数处理的加载器?
答案 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。