recycleView(一)基础使用

1 .recycleView的基本使用

1.recycleView部分:

mRvBlankAdapter=new RvBlankAdapter(getActivity());//适配器
        mRvBlankContent.setAdapter(mRvBlankAdapter);//设置适配器
        UtilsRecycleView.setBaseGlideParam(getActivity(),mRvBlankContent);//设置recycleView的基本属性

用到的utils:

public class UtilsRecycleView {
    /*
    linearlayout,参数
    */
    public static void setBaseLinearLayoutParam(Context context, RecyclerView recyclerView){
        recyclerView.setLayoutManager(new LinearLayoutManager(context));
        recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
            @Override
            public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
                super.getItemOffsets(outRect, view, parent, state);
                outRect.bottom=5;
                outRect.top=5;
            }
        });
    }
    /*
    表格列表
    */
    public static void setBaseGlideParam(Context context, RecyclerView recyclerView){
        recyclerView.setLayoutManager(new GridLayoutManager(context,2,RecyclerView.VERTICAL,false));
        recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
            @Override
            public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
                super.getItemOffsets(outRect, view, parent, state);
                outRect.bottom=5;
                outRect.top=5;
            }
        });
    }
} 

2.adapter部分

public class RvBlankAdapter extends RecyclerView.Adapter<RvBlankAdapter.BlankViewHolder> {
    private static final String TAG = "RvBlankAdapter";
    private Context context;
    private List<BeanWallpaper> lists=new ArrayList<>();

    public RvBlankAdapter(Context context) {
        this.context=context;
    }

    @NonNull
    @Override
    public RvBlankAdapter.BlankViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(context).inflate(R.layout.item_blank_content,parent,false);
        return new BlankViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RvBlankAdapter.BlankViewHolder holder, int position) {
        Log.d(TAG, "onBindViewHolder: "+lists.size());
//        Log.d(TAG, "onBindViewHolder: "+lists.get(1));
        Glide.with(context).load(lists.get(position).getUrl()).into(holder.mIvContent);
    }

    @Override
    public int getItemCount() {
        return lists==null?5:lists.size();
    }

    public void setData(List<BeanWallpaper> beanWallpapers) {
        this.lists.clear();
        this.lists.addAll(beanWallpapers);
        notifyDataSetChanged();
    }

    public class BlankViewHolder extends RecyclerView.ViewHolder {
        private ImageView mIvContent;
        private TextView mTvTitle;
        public BlankViewHolder(@NonNull View itemView) {
            super(itemView);
            mIvContent=itemView.findViewById(R.id.iv_content);
            mTvTitle=itemView.findViewById(R.id.tv_title);
        }
    }
}

3.子线程更新ui线程

//在主线程更新UI
        new Handler(getActivity().getMainLooper()).post(new Runnable() {
            @Override
            public void run() {
                mRvBlankAdapter.setData(beanWallpapers);
            }
        });

2.recycleView使用中的问题

1.item设置背景问题

//设置哪些关卡可以通过,哪些不可以通过,
        for (int i = 0; i < mOkPositionInt; i++) {
            if (position==i){
                holder.mTvTitle.setEnabled(true);
                holder.mTvTitle.setBackgroundResource(R.drawable.square_bg);
            }
        }

2.刷新型recycleView

3.为空问题

1.可能值不对应,写错了

4.子线程更新UI线程没有写,而是直接更新

可怕点:不会抱错
解决办法,子线程更新UI线程

//在主线程更新UI
        new Handler(getActivity().getMainLooper()).post(new Runnable() {
            @Override
            public void run() {
                mRvBlankAdapter.setData(beanWallpapers);
            }
        });

3.1错乱问题

//刷新图片不混乱
    @Override
    public int getItemViewType(int position) {
        return position;
    }

4.抢焦点问题,即把上面的布局都顶上去

解决办法:在RecycleView里添加一下属性
表示不抢焦点

        android:descendantFocusability="blocksDescendants"

5.值不对应问题,很难找

即接口没有0,我们却写了0。解决办法是

position+1

6.怎么滑动时顺便把图片顶上去

<androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/iv_title_fg_other_voice"
                android:layout_width="200sp"
                android:layout_height="200sp"
                android:layout_gravity="center" />

            <TextView
                android:textSize="30sp"
                android:id="@+id/tv1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="center"
                android:text="hello" />

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rv_content_new"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </LinearLayout>
    </androidx.core.widget.NestedScrollView>

7.ConstrainLayout与RecycleView冲突

1.解决方案一:

换成LinearLayout

2.解决方案二:设置高度值

动态计算recycleView的高度,然后设置高度值

8.点击传过去的值不对问题

解决办法,不要把BeanList.get(position)提出来,而是这样

BeanList.get(position).getTitle()

9.Index: 0, Size: 0问题

第一次执行setAdapter的时候就会执行一次,而此时list.size就是为0,所以就报错了。然后再执行一次setData,
解决办法:把几个list合成一个list

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值