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