我的应用程序使用AsyncTaskLoader从数据库进行查询和加载。用户可以按类别过滤数据。没有设备旋转时它可以正常工作,但是在设备方向改变后,Loader不会加载按类别过滤的任何数据。
我的代码是:
//In activity oncreate
getSupportLoaderManager().initLoader (0, null, controller);
关于用户过滤操作,我打电话:
loader.onCententChanged();
我在上面的行中设置了一个断点,并指出在加载器实例中,它的mListener
为NULL,因此调用onCententChanged()
不会传递结果。如果我们不旋转设备,mListener
不是NULL。
有人有这个问题吗?请帮忙!
修改
很抱歉迟到的回复,我没有看到来自Stackoverflow推送的任何电子邮件,我会检查我的设置。
顺便说一句,我的应用程序使用MVC模式,控制器用于处理数据加载,事件监听器,操作。在这种情况下,控制器实现LoaderManager.LoaderCallbacks。
当我调试它时,设置断点并查看发生了什么,我看到Loader类的mListener
成员在纵向模式下首次加载时不为空,但是当我将设备转为横向模式时,mListener为NULL,因此回调不打电话。请参阅附加图像。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_latest_topics_layout);
// Omitted code
getSupportLoaderManager().initLoader (0, null, controller);
}
当用户过滤器选择数据过滤器时:
new AlertDialog.Builder(mContext)
.setTitle("Choose a filter")
.setSingleChoiceItems(R.array.latest_episodes_filter_titles, mFilter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ListView listView = ((AlertDialog)dialog).getListView();
mFilter = listView.getCheckedItemPosition();
mListHandler.getLoader().onContentChanged();
dialog.dismiss();
}
})
.setNegativeButton("Cancel", null).show();
调试:首次加载纵向/横向时
调试:旋转设备时
答案 0 :(得分:0)
请尝试按以下方式初始化加载程序。可能它可以帮到你。
//In activity oncreate
if (getSupportLoaderManager().getLoader(0) == null) {
getSupportLoaderManager().initLoader(0, new Bundle(), this);
} else {
getSupportLoaderManager().restartLoader(0, new Bundle(), this);
}