Android LoadManager无法回调onLoadFinish问题

来源:互联网 发布:淘宝怎么删除仓库宝贝 编辑:程序博客网 时间:2024/05/23 19:09

前言


Android LoadManager是3.0之后引入的,现在都8.0了,项目中可以不用考虑低版本的适配,完全可以使用,我项目中用的比较多,近期发现,LoadManager 有时无法回调onLoadFinish的方法.


解决方法

重载onStartLoading方法
加入forceLoad()(意思是强制执行)强制执行该回调方法
package com.contentproviderdb;import android.content.Context;import android.database.Cursor;import android.net.Uri;import android.support.v4.content.AsyncTaskLoader;/** * Created by sdj on 2017/9/7. */public class LoadInstance extends AsyncTaskLoader<User> {    private User user;    private Context context;    private static final String URIS = "content://com.contentproviderdb.TestContentProvider";    public LoadInstance(Context context) {        super(context);        this.context = context;        user = new User();    }    @Override    public void stopLoading() {        super.stopLoading();        cancelLoad();    }    @Override    protected void onStartLoading() {        super.onStartLoading();        forceLoad();    }    @Override    public User loadInBackground() {        Uri uri = Uri.parse(URIS);        Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);        if (null != cursor && cursor.getCount() > 0) {            StringBuilder stringBuilder = new StringBuilder("用户列表如下:\n");            while (cursor.moveToNext()) {                stringBuilder.append(cursor.getString(cursor.getColumnIndex("userName")) + " 密码= " + cursor.getString(cursor.getColumnIndex("userPwd")) + "\n");            }            user.setUserName(stringBuilder.toString());        }        return user;    }}


参考相关资料链接如下:

onLoadFinish无法回调问题



小彩蛋



LoadManager有在android.app.包下面的LoadManager和android.support.v4包下的LoadManager,这两个有什么区别吗,答案是肯定的.
因为android.app.LoadManager是在android 3.0(API 11)上引入的,所以3.0之前的手机使用loadManager会报错的。

大家都知道,android版本升级后,google官方会提供Android Support Library package 系列的包来保证高版本sdk开发的向下兼容性,下面是一些注意事项:

gradle引用appcompat-v7包的时候就不需要引用v4了,因为v7里默认包含了v4包;

compile ‘com.android.support:appcompat-v7:21.0.3’ 中的21代表API level 21推出的兼容包.

v4包冲突这个错误:多个module所引用的v4包版本不一致造成的; 把其他module的v4包修改成主module所使用的v4包即可!

support-v4

用在API lever 4(即Android 1.6)或者更高版本之上。它包含了相对更多的内容,而且用的更为广泛,例如:Fragment,NotificationCompat,
LoadBroadcastManager,ViewPager,PageTabAtrip,Loader,FileProvider 等

Gradle引用方法:

compile 'com.android.support:support-v4:21.0.3'

support-v7

这个包是为了考虑API level 7(即Android 2.1)及以上版本而设计的,但是v7是要依赖v4这个包的,v7支持了Action Bar以及一些Theme的兼容。

Gradle引用方法:

compile 'com.android.support:appcompat-v7:21.0.3'

所以说,建议大家还是使用V4包的Fragment和loadManager,基本系统1.6以上的平台都是可以做到兼容的.

谷歌新出的一些控件,大家也是可以用的,比如Android O 8.0里面的ResizeTextView,都是可以用到项目中的,谷歌

的向下兼容包可以到官网去查看引用,这样不会用存在版本上的问题!







原创粉丝点击