android 排行榜中异步加载头像图片

Posted 孤注一掷 、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 排行榜中异步加载头像图片相关的知识,希望对你有一定的参考价值。

排行榜用的是RecyclerView显示,适配器使用BaseQuickAdapter,效果如下

1.RecycylerView适配器的使用

先引入依赖,然后新建类RegionList2Adapter继承基类

implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46'//RecyclerView适配器
//当前使用的战区列表适配器
public class RegionList2Adapter extends BaseQuickAdapter<RegionUser, BaseViewHolder> {
    public RegionList2Adapter(int layoutResId, @Nullable List<RegionUser> data) {
        super(layoutResId, data);
    }
    @Override
    protected void convert(BaseViewHolder helper, RegionUser item) {
        //先赋值默认的Bitmap
        helper.setText(R.id.user_number,item.getNumber().toString())
                .setText(R.id.user_combatPower,item.getCombatPower().toString());
        ((ImageView)helper.getView(R.id.user_image)).setImageBitmap(item.getImageId());
        JMessageClient.getUserInfo(item.getPhone(), new GetUserInfoCallback() {
            @Override
            public void gotResult(int i, String s, UserInfo userInfo) {
                if(i==0){
                    userInfo.getAvatarBitmap(new GetAvatarBitmapCallback() {
                        @Override
                        public void gotResult(int i, String s, Bitmap bitmap) {
                            if(i==0){
                                //赋值头像
                                ((ImageView)helper.getView(R.id.user_image)).setImageBitmap(bitmap);
                            }
                        }
                    });
                    //如果有用户名
                    if(TextUtils.isEmpty(userInfo.getNickname())){
                        helper.setText(R.id.user_name,userInfo.getUserName());
                    }else{
                        helper.setText(R.id.user_name,userInfo.getNickname());
                    }

                }
            }
        });
    }
}

其中JMessageClient.getUserInfo()等是异步获取,这个适配器相当于每个item单独加载,正好适用于异步加载。

2.在Activity中

RecyclerView recyclerView = view.findViewById(R.id.recycler_view_3);
LinearLayoutManager layoutManager = new LinearLayoutManager(this.getActivity());
recyclerView.setLayoutManager(layoutManager);
...
...
//循环得到List<RegionUser>,赋给适配器regionList2Adapter 
for (UserListInfo userListInfo:userListInfos){
                        RegionUser regionUser1=new RegionUser(
                                userListInfos.indexOf(userListInfo)+1,
                                userListInfo.getUname(),
                                bitmap,  //默认的图片
                                userListInfo.getCombatPower(),
                                userListInfo.getPhone());
                        regionUsers.add(regionUser1);
                    }
RegionList2Adapter regionList2Adapter = new 
        RegionList2Adapter(R.layout.region_user_item,regionUsers);
recyclerView.setAdapter(regionList2Adapter);

3.region_user_item.xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/bg_username"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="8dp">
    <RelativeLayout
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:layout_gravity="center_vertical">
        <LinearLayout
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:gravity="center">
            <TextView
                android:id="@+id/user_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="23sp" />
        </LinearLayout>

        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/user_image"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginLeft="55dp" />
    </RelativeLayout>



    <TextView
        android:id="@+id/user_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:textSize="18sp"
        android:layout_marginLeft="10dp" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="right|center_vertical">
        <TextView
            android:id="@+id/user_combatPower"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:layout_marginRight="20dp" />
    </LinearLayout>


</LinearLayout>

借鉴文章:

Android开发丶万能适配器BaseQuickAdapter和刷新控件SmartRefreshLayout搭配Recyclerview实现列表界面

https://www.shangmayuan.com/a/c182a6aef10b4a5d912265cf.html

 

 

 

以上是关于android 排行榜中异步加载头像图片的主要内容,如果未能解决你的问题,请参考以下文章

Android纯代码创建页面布局(含异步加载图片)

Android自定义View实战之自定义圆形头像CircleImageView支持加载网络图片

Android默认头像那些事儿

Android默认头像那些事儿

Android端上传图片到后台,存储到数据库中 详细代码

Android之ListView异步加载网络图片(优化缓存机制)