Android 控件 RecyclerView简单使用

Android 控件 RecyclerView简单使用

1.导依赖库

implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.github.bumptech.glide:glide:4.8.0'//图片

2.布局

<android.support.v7.widget.RecyclerView
        android:id="@+id/recycle_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

3.在MainActivity找到控件

RecyclerView recyclerView = findViewById(R.id.recycle_view);
       // LinearLayoutManager layoutManager = new LinearLayoutManager(this );
//设置布局管理器
       // GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3);
        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
//设置为垂直布局,这也是默认的
       // layoutManager.setOrientation(OrientationHelper. VERTICAL);
//设置Adapter
 NormalAdapter recycleAdapter = new NormalAdapter(list);
        recyclerView.setAdapter(recycleAdapter);
        //设置分隔线
        //recyclerView.addItemDecoration( new DividerGridItemDecoration(this ));
//设置增加或删除条目的动画
        recyclerView.setItemAnimator( new DefaultItemAnimator());

 4.适配器 

创建一个继承RecyclerView.Adapter<VH>的Adapter类

package mvp.com.example.recyclerview_demo.adapter;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;

import java.util.List;

import mvp.com.example.app.MyApp;
import mvp.com.example.bean.User;
import mvp.com.example.recyclerview_demo.R;

// ① 创建Adapter
public class NormalAdapter extends RecyclerView.Adapter<NormalAdapter.VH>{
    //② 创建ViewHolder
    public static class VH extends RecyclerView.ViewHolder{
        public final TextView title;
        public final ImageView imageView;
        public VH(View v) {
            super(v);
            title = (TextView) v.findViewById(R.id.text_title);
            imageView = (ImageView) v.findViewById(R.id.image_view);
        }
    }
    
    private List<User> mDatas;
    public NormalAdapter(List<User> data) {
        this.mDatas = data;
    }

    //③ 在Adapter中实现3个方法
    @Override
    public void onBindViewHolder(VH holder, int position) {
        holder.title.setText(mDatas.get(position).getTitle());
        Glide.with(MyApp.getContext()).load(mDatas.get(position).getUrl()).into(holder.imageView);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //item 点击事件
            }
        });
    }

    @Override
    public int getItemCount() {
        return mDatas.size();
    }

    @Override
    public VH onCreateViewHolder(ViewGroup parent, int viewType) {
        //LayoutInflater.from指定写法
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.itme_layout, parent, false);
        return new VH(v);
    }
}

多条目的适配器 点击长按的接口回调

package com.example.adapter;
 
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
 
import com.bumptech.glide.Glide;
 
import java.util.List;
 
import com.example.app.MyApp;
import com.example.bean.NewBean;

// ① 创建Adapter
public class NormalAdapter extends RecyclerView.Adapter<NormalAdapter.VH>{
    private ClickListener clickListener;
    private LongClickListener longClickListener;

    //② 创建ViewHolder
    public static class VH extends RecyclerView.ViewHolder{
        public final TextView title;
        public final TextView title_1;
        public final ImageView imageView;
        public final ImageView imageView_1;
        public final ImageView imageView_2;
        public final ImageView imageView_3;
        public VH(View v) {
            super(v);
            title = (TextView) v.findViewById(R.id.text_title);
            title_1 = (TextView) v.findViewById(R.id.text_title_1);
            imageView = (ImageView) v.findViewById(R.id.image_view);
            imageView_1 = (ImageView) v.findViewById(R.id.image_view_1_1);
            imageView_2 = (ImageView) v.findViewById(R.id.image_view_1_2);
            imageView_3 = (ImageView) v.findViewById(R.id.image_view_1_3);
        }
    }
    
    private List<NewBean> mDatas;

    public List<NewBean> getmDatas() {
        return mDatas;
    }

    public void setmDatas(List<NewBean> mDatas) {
        this.mDatas = mDatas;
    }
    public NewBean getBean(int position){
        NewBean newBean = mDatas.get(position);
        return newBean;
    }
    //③ 在Adapter中实现3个方法
    @Override
    public void onBindViewHolder(VH holder, final int position) {
        /*holder.title.setText(mDatas.get(position).getTitle());
        Glide.with(MyApp.getContext()).load(mDatas.get(position).getUrl()).into(holder.imageView);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //item 点击事件
            }
        });*/
        switch (holder.getItemViewType()){
            case 0:
                holder.title.setText(mDatas.get(position).getTitle());
                Glide.with(MyApp.getContext()).load(mDatas.get(position).getThumbnail_pic_s()).into(holder.imageView);
                holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //item 点击事件
                        clickListener.onItmeClickListener(v,position);
                    }
                });
                holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        longClickListener.onLongItmeClickListener(v,position);
                        return true;
                    }
                });
                break;
                case 1:
                holder.title_1.setText(mDatas.get(position).getTitle());
                Glide.with(MyApp.getContext()).load(mDatas.get(position).getThumbnail_pic_s()).into(holder.imageView_1);
                Glide.with(MyApp.getContext()).load(mDatas.get(position).getThumbnail_pic_s02()).into(holder.imageView_2);
                Glide.with(MyApp.getContext()).load(mDatas.get(position).getThumbnail_pic_s03()).into(holder.imageView_3);
                holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //item 点击事件
                        clickListener.onItmeClickListener(v,position);


                    }
                });
                holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        longClickListener.onLongItmeClickListener(v,position);
                        return true;
                    }
                });
                break;
        }
    }
 
    @Override
    public int getItemCount() {
        return mDatas.size();
    }

    @Override
    public VH onCreateViewHolder(ViewGroup parent, int viewType) {
        //LayoutInflater.from指定写法
        if (viewType==0){
            View o = LayoutInflater.from(parent.getContext()).inflate(R.layout.itme_layout, parent, false);
            return new VH(o);
        }else if(viewType == 1){
            View t = LayoutInflater.from(parent.getContext()).inflate(R.layout.itme_layout1, parent, false);
            return new VH(t);
        }

       return null;
    }

    @Override
    public int getItemViewType(int position) {

        String thumbnail_pic_s = mDatas.get(position).getThumbnail_pic_s();
        String thumbnail_pic_s02 = mDatas.get(position).getThumbnail_pic_s02();
        String thumbnail_pic_s03 = mDatas.get(position).getThumbnail_pic_s03();
        if (TextUtils.isEmpty(thumbnail_pic_s02)&& TextUtils.isEmpty(thumbnail_pic_s03)){
            return 0;
        }else {
            return 1;
        }

    }
    public interface ClickListener{
        void onItmeClickListener(View view,int position);
    }
    public void setOnItmeClickListener(ClickListener clickListener){
        this.clickListener = clickListener;
    }
    public interface LongClickListener{
        void onLongItmeClickListener(View view,int position);
    }
    public void setOnLongItmeClickListener(LongClickListener longClickListener){
        this.longClickListener = longClickListener;
    }
}

 扩展

 

package com.example.my_shopping;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.example.adapter.NewAdapter;
import com.example.adapter.NormalAdapter;
import com.example.bean.FoodBean;
import com.example.bean.Result;
import com.example.core.BaseCore;
import com.example.presenter.FoodPresenter;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity implements BaseCore ,NewAdapter.FoodsCallback {

    @BindView(R.id.recycler_title)
    RecyclerView recyclerTitle;
    @BindView(R.id.recycler)
    RecyclerView recycler;
    @BindView(R.id.text_sum)
    TextView textSum;
    @BindView(R.id.but_sum)
    Button butSum;
    private FoodPresenter presenter;
    private NewAdapter adapter1;
    private List<FoodBean> foodBean;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        presenter = new FoodPresenter(this);
        presenter.readData();
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        LinearLayoutManager linearLayoutManager_new = new LinearLayoutManager(this);
        linearLayoutManager_new.setOrientation(LinearLayoutManager.VERTICAL);
        recycler.setLayoutManager(linearLayoutManager_new);
        recyclerTitle.setLayoutManager(linearLayoutManager);
    }

    @OnClick(R.id.but_sum)
    public void onViewClicked() {

    }

    @Override
    public void loadSuccess(Object data) {
        foodBean = (List<FoodBean>) data;
        final NormalAdapter adapter = new NormalAdapter();
        adapter.setmDatas(foodBean);
        adapter.setContext(this);
        recyclerTitle.setAdapter(adapter);
        adapter1 = new NewAdapter(MainActivity.this);
        List<FoodBean.SpusBean> spus = foodBean.get(0).getSpus();
        adapter1.setmDatas(spus);
        adapter1.setContext(MainActivity.this);
        recycler.setAdapter(adapter1);


        adapter.setOnItmeClickLister(new NormalAdapter.ItmeClickLister() {
            @Override
            public void itmeClick(View v, int position) {

                List<FoodBean.SpusBean> spus = MainActivity.this.foodBean.get(position).getSpus();
                adapter1.setmDatas(spus);
                adapter1.setContext(MainActivity.this);
                recycler.setAdapter(adapter1);
            }
        });
    }

    @Override
    public void loadError(Result result) {
        Toast.makeText(this, result.getMessage(), Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.unBaseCore();
    }

    @Override
    public void reduceGood() {
        getSum();

    }

    @Override
    public void addAction() {
        getSum();
    }
    public void getSum(){
        double sum=0;
        int num=0;
        for (int i = 0; i < foodBean.size(); i++) {
            for (int j = 0; j < foodBean.get(i).getSpus().size(); j++) {
                sum+=foodBean.get(i).getSpus().get(j).get__v()*foodBean.get(i).getSpus().get(j).getSkus().get(0).getPrice();
                num+=foodBean.get(i).getSpus().get(j).get__v();
            }
        }
        textSum.setText("合计:¥"+sum);
        butSum.setText("去结算("+num+")");
    }

}
package com.example.adapter;
 
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
 
import com.bumptech.glide.Glide;
import com.example.bean.FoodBean;
import com.example.my_shopping.R;

import java.util.List;
 
// ① 创建Adapter
public class NormalAdapter extends RecyclerView.Adapter<NormalAdapter.VH>{
    private ItmeClickLister itmeClickLister;

    //② 创建ViewHolder
    public static class VH extends RecyclerView.ViewHolder{
        public final TextView title;
        public VH(View v) {
            super(v);
            title = (TextView) v.findViewById(R.id.text_title);
        }
    }
    
    private List<FoodBean> mDatas;
    private Context context;

    public Context getContext() {
        return context;
    }

    public void setContext(Context context) {
        this.context = context;
    }

    public List<FoodBean> getmDatas() {
        return mDatas;
    }

    public void setmDatas(List<FoodBean> mDatas) {
        this.mDatas = mDatas;
    }

    //③ 在Adapter中实现3个方法
    @Override
    public void onBindViewHolder(VH holder, final int position) {
        holder.title.setText(mDatas.get(position).getName());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //item 点击事件
                itmeClickLister.itmeClick(v,position);
            }
        });
    }
 
    @Override
    public int getItemCount() {
        return mDatas.size();
    }
 
    @Override
    public VH onCreateViewHolder(ViewGroup parent, int viewType) {
        //LayoutInflater.from指定写法
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.title_layout, parent, false);
        return new VH(v);
    }
    public interface ItmeClickLister{
        void itmeClick(View v,int position);
    }
    public void setOnItmeClickLister(ItmeClickLister itmeClickLister){
        this.itmeClickLister=itmeClickLister;
    }
}
package com.example.adapter;
 
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
 
import com.bumptech.glide.Glide;
import com.example.bean.FoodBean;
import com.example.layout.MyLayout;
import com.example.my_shopping.R;

import java.util.List;
 
// ① 创建Adapter
public class NewAdapter extends RecyclerView.Adapter<NewAdapter.VH>{
    private final FoodsCallback foodsCallback;
 
    //② 创建ViewHolder
    public static class VH extends RecyclerView.ViewHolder{
        public final MyLayout my_layout;
 
        public VH(View v) {
            super(v);
            my_layout =  v.findViewById(R.id.my_layout);
        }
    }
    
    private List<FoodBean.SpusBean> mDatas;
    private Context context;
    public Context getContext() {
        return context;
    }
 
    public void setContext(Context context) {
        this.context = context;
    }
    public List<FoodBean.SpusBean> getmDatas() {
        return mDatas;
    }
 
    public void setmDatas(List<FoodBean.SpusBean> mDatas) {
        this.mDatas = mDatas;
    }
 
    //③ 在Adapter中实现3个方法
    @Override
    public void onBindViewHolder(VH holder, final int position) {
 
        TextView text_title= holder.my_layout.findViewById(R.id.text_title);
        TextView text_price= holder.my_layout.findViewById(R.id.text_price);
        ImageView image_itme= holder.my_layout.findViewById(R.id.image_itme);
        Button but_jian = holder.my_layout.findViewById(R.id.but_jian);
        Button but_jia= holder.my_layout.findViewById(R.id.but_jia);
        EditText edit_count= holder.my_layout.findViewById(R.id.edit_count);
        edit_count.setText(String.valueOf(mDatas.get(position).get__v()));
        text_title.setText(mDatas.get(position).getName());
 
        text_price.setText("¥"+mDatas.get(position).getSkus().get(0).getPrice());
        /*String replace = mDatas.get(position).getImages().replace("https", "http");
        //Log.e("===================",replace+"");
        //分割字符串
        String[] split = replace.split("!");
        //Log.e("===================++",split[0]);*/
        Glide.with(context).load(mDatas.get(position).getPic_url()).into(image_itme);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //item 点击事件
            }
        });
        but_jia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              mDatas.get(position).set__v(mDatas.get(position).get__v()+1);
                foodsCallback.addAction();
              notifyDataSetChanged();
            }
        });
        but_jian.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if ( 0 == mDatas.get(position).get__v()) return;
                mDatas.get(position).set__v(mDatas.get(position).get__v()-1);
                foodsCallback.reduceGood();
                notifyDataSetChanged();
            }
        });
    }
 
    @Override
    public int getItemCount() {
        return mDatas.size();
    }
 
    @Override
    public VH onCreateViewHolder(ViewGroup parent, int viewType) {
        //LayoutInflater.from指定写法
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.i_layout, parent, false);
        return new VH(v);
    }
    public interface FoodsCallback{
        void reduceGood();
        void addAction();
    }
    public NewAdapter(FoodsCallback foodsCallback) {
       this.foodsCallback= foodsCallback;
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值