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;
}
}