来自小白的呼唤 不严谨的android recyclerview基本使用 与设置item(完)

注:

以下纯属个人主观意识 

可能会存在很多错误 小白一只

如果你是个珍惜每分每秒或者想提高自己,那不要往下看啦会浪费时间滴!

主要核心内容借鉴了该博客,文章思路

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1118/2004.html

具体原理就不多描述网上资料都有 ,总之RecyclerView想比listview 进更为灵活。

RecyclerView 是Android5.0 v7 的扩展包 可以往下兼容

包名:android.support.v7.widget.RecyclerView  

由于是扩展包需要自己添加(注册

在build.gradle添加代码 帝国的网络结果很难说

试过手动添加,出现了很多奇怪的问题 

最后升级了SDk轻松搞定

添加方法File  -  Project Structure  - Dependencies   -   "+"   -     Library Dependency



布局

<?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="match_parent"
    >
    <android.support.v7.widget.RecyclerView
        android:id="@+id/RecyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>
item 布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="100dp"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/fruit_text_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>

MianActivity

private List<File> data=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_recyclerview);
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.RecyclerView);
    // RecyclerView 区别于ListView 自身只进行管理,提供接口由其具体类实现
    // 布局管理器有三种:
    //  LinearLayoutManager 现行管理器,支持横向、纵向。
    //  GridLayoutManager 网格布局管理器
    //  StaggeredGridLayoutManager 瀑布就式布局管理器
    LinearLayoutManager LayoutManager =new LinearLayoutManager(this);
    // LinearLayoutManager.HORIZONTAL 横向排列
    LayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    recyclerView.setLayoutManager(LayoutManager);
    File file=new File("I need food");
    data.add(file);
    What what = new What(data);
    recyclerView.setAdapter(what);

---Adapter 先完整代码 后面再分析

List<File> File 我指定需求的参数,可以是你需求的任何类型

RecycView.ViewHolder 是item的持有类 


class   WhatViewHolder  extends RecyclerView.ViewHolder{
    TextView textView;
    public WhatViewHolder(View itemView) {
        super(itemView);
        textView = (TextView) itemView.findViewById(R.id.fruit_text_item);
    }
}
class What extends RecyclerView.Adapter<WhatViewHolder>{
    List<File> list;
    public What(List<File> list){
        this.list = list;
    }
    public WhatViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.fruit_item,parent,false);
        WhatViewHolder wHolder = new WhatViewHolder(view);
        return wHolder;
    }
    @Override
    public void onBindViewHolder(WhatViewHolder holder, int position) {
        holder.textView.setText(list.get(position).getName());
    }
    @Override
    public int getItemCount() {
        return list.size();
    }
}

分析  WhtViewHolder可以设成静态内部类等等一些效率高的类型 这里为容易解就写成这样

/extends RecyclerView.ViewHolder 泛型指定
class  WhatViewHolder extends RecyclerView.ViewHolder{

    public WhatViewHolder(View itemView) {
        super(itemView);
    }
}
class What extends RecyclerView.Adapter<WhatViewHolder>{
    // return null!而且返回参数就是传进来的WhatViewHolder
    // 在onCreate方法中这种表现很明显
    // 就是需要我们把从泛型传入的WhatViewHolder进行初始化参数然后返回
    @Override
    public WhatViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }
    // 这里的WhatViewHolder holder,就是接收onCreate方法的返回参数
    // 进行绑定
    @Override
    public void onBindViewHolder(WhatViewHolder holder, int position) {

    }
    //这里不能忽略 需要提供具体item的数量 如果就return 0; (不显示或不处理)
    @Override
    public int getItemCount() {
        return 0;
    }
}

--------------------------------------------------


RecyclerView 监听需要自己在Adapter中实现 

优点:在adapter中实现监听,所以可以监听item中具体子控件,灵活(一个item展现图文情况下分开监听)

下面实现(修改背景颜色) 主是回调机制的应用

在adapter中添加一个接口 并提供外部访问方法  (这里结合上面代码直接添加到What类中即可)

接口

public static interface  OnItemClickListener {

    void onItemClick(List<WhatViewHolder> adapterViewHolder , int itemId);

}

外部访问方法

public OnItemClickListener onItemClickListener;

public void setOnItemClickListener(OnItemClickListener  onItemClickListener){
    this.onItemClickListener = onItemClickListener;
}
注册监听 可以在很多地方实现比如OnBind方法里(这主要考虑)

List<WhatViewHolder> adapterViewHolder = new ArrayList();
@Override
public WhatViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.fruit_item,parent,false);
    final WhatViewHolder wHolder = new WhatViewHolder(view);
                adapterViewHolder.add(wHolder);
                view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int itemId = wHolder.getAdapterPosition();
                        //回调
                        onItemClickListener.onItemClick(adapterViewHolder,itemId  );
                    }
                });
    return wHolder;
}
MainActivity中添加*(呵~不严谨)

File file=new File("I need food0");
data.add(file);
File file1=new File("I need food1");
data.add(file1);
File file2=new File("I need food2");
data.add(file2);
what.setOnItemClickListener(new What.OnItemClickListener() {
    @Override
    public void onItemClick(List<WhatViewHolder> adapterViewHolder, int itemId) {
        for (int i = 0;i<adapterViewHolder.size();i++){
            adapterViewHolder.get(i).textView.setBackgroundColor(0xff888888);
        }
        adapterViewHolder.get(itemId).textView.setBackgroundColor(0xff0000ff);

    }
});

--------------------


还有很多想到但没能写下去,其实就有点懵了。献丑了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值