【快速使用】RecyclerView(LinearLayoutManager)

1、添加依赖

  • implementation ‘androidx.recyclerview:recyclerview:1.2.0-alpha03’

2、构建Item布局

3、构建ItemBean

public class ItemBean_List {
    private String id           = "";
    private String productModel = "";

    ItemBean_List(String id, String productModel) {
        this.id = id;
        this.productModel = productModel;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getProductModel() {
        return productModel;
    }

    public void setProductModel(String productModel) {
        this.productModel = productModel;
    }
}

4、构建Adapter

public class ListViewAdapter extends RecyclerView.Adapter<ListViewAdapter.InnerHolder> {

    private        List<ItemBean_List> mData;
    private static OnItemClickListener mOnItemClickListener;

    void setData(List<ItemBean_List> data) {
        mData = data;
    }

    @NonNull
    @Override
    public InnerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //创建条目的回调函数
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
        return new InnerHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull InnerHolder holder, int position) {
        //绑定数据
        holder.setData(mData.get(position), position);
    }

    @Override
    public int getItemCount() {
        //设置条目数量
        if (mData != null) {
            return mData.size();
        }
        return 0;
    }

    static class InnerHolder extends RecyclerView.ViewHolder {
        private static final String TAG = "InnerHolder";

        TextView textView1, textView2;
        int mPosition;

        InnerHolder(@NonNull View itemView) {
            super(itemView);
            textView1 = itemView.findViewById(R.id.textView1);
            textView2 = itemView.findViewById(R.id.textView2);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mOnItemClickListener.onClick(mPosition, v);
                }
            });
        }

        void setData(ItemBean_List itemBean, int position) {
            //序号、产品型号
            textView1.setText(itemBean.getId());
            textView2.setText(itemBean.getProductModel());
            mPosition = position;
        }

    }

    void setItemClickListener(OnItemClickListener listener) {
        mOnItemClickListener = listener;
    }

    //创建一个接口
    public interface OnItemClickListener {
        void onClick(int position, View v);
    }
}

使用

List<ItemBean_List> mData_List = new ArrayList<>();

//设置布局管理器
LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(this);
mLinearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(mLinearLayoutManager);

//设置适配器
ListViewAdapter listViewAdapter = new ListViewAdapter();
//设置测试数据
for (int i = 1; i < 20; i++) {
    mData_List.add(new ItemBean_List("A" + i, "xxxxx"));
}
listViewAdapter.setData(mData_List);
//设置点击事件
listViewAdapter.setItemClickListener(new ListViewAdapter.OnItemClickListener() {
    @Override
    public void onClick(int position, View v) {
        Log.d(TAG, "onClick: " + position);
    }
});
//绑定适配器
mRecyclerView.setAdapter(listViewAdapter);

数据刷新

  • 更新mData_List,然后执行listViewAdapter.notifyDataSetChanged();即可
  • 要注意的是这里的listViewAdapter要保持原对象,在以参数传出去后再使用notifyDataSetChanged是无效的。

无限循环(伪)

  • 伪无限循环就是还是会滚到尽头的,但可能需要程序持续运行几十年的时间(我认了)
  • 第一步,修改getItemCount(),使列表非常的长
 @Override
 public int getItemCount() {
     //设置条目数量
     if (mData != null) {
         return Integer.MAX_VALUE;
     }
     return 0;
 }
  • 第二步,修改onBindViewHolder(),将数据循环绑定
@Override
public void onBindViewHolder(@NonNull LongListViewAdapter.InnerHolder holder, int position) {
    //绑定数据
    if (mData != null && mData.size() != 0)
        holder.setData(mData.get(position % mData.size()), position);
}
  • 其他部分一致无变化

另一个循环的思路

  • 滚动到底部之后再返回顶部再次滑动
  • 那这样我们需要知道滑动到底部的事件,2个方法,第一个是通过每次滑动后检查最后一个position是不是列表最后一个
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
        if (newState == RecyclerView.SCROLL_STATE_IDLE) {//滑动结束
            if (mLinearLayoutManager.findLastCompletelyVisibleItemPosition() == mListViewAdapter_view1_recyclerView.getItemCount()) {
                //到底了
            }
        }
        super.onScrollStateChanged(recyclerView, newState);
    }

    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
    }
});
  • 第二种是自定义RecyclerView(外部调用参数也行,不过这样好看些)
public boolean isSlideToBottom() {
    return computeVerticalScrollExtent() + computeVerticalScrollOffset() >= computeVerticalScrollRange();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值