总效果:
实现的功能:①点击右上角的心按钮实现心按钮的切换(线性切换成网格)
------------------②点击四个不同的按钮实现前三个按钮的具体展示
------------------③点击条目进入详情页
1.布局
①头部布局:用自定义View,布局完新建一个类继承LinearLayout:
-------加载一下布局LayoutInflater.from(context).inflate(R.layout.toubu,this)
-------查找一下控件
②总布局:
-------引用自定义View(include)
-------Button+RecyclerView(导依赖:implementation ‘com.android.support:recyclerview-v7:28.0.0’)
③其他布局自己写就OK了,没有要注意的点
2.我用的是MVP架构:
①工具类:
注意:写日志拦截器时需要导日志依赖(implementation ‘com.squareup.okhttp3:logging-interceptor:3.12.0’)
②ModelImpe类里:
3.适配器:多条目
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener {
private Context context;
private List<MyData.DataBean> mlist;
private int type;
private final int ONE=0;
private final int TWO=1;
public MyAdapter(Context context, List<MyData.DataBean> mlist) {
this.context = context;
this.mlist = mlist;
}
public void setType(int type){
this.type=type;
}
//加载布局
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=null;
RecyclerView.ViewHolder holder=null;
switch (i){
case ONE:
view=LayoutInflater.from(context).inflate(R.layout.wrecy,null);
holder=new LinerHolder(view);
break;
case TWO:
view=LayoutInflater.from(context).inflate(R.layout.lrecy,null);
holder=new GridHolder(view);
break;
}
view.setOnClickListener(this);
return holder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
if(viewHolder instanceof LinerHolder){
((LinerHolder)viewHolder).ming.setText(mlist.get(i).getTitle()+"");
((LinerHolder)viewHolder).jiage.setText("价格:" + mlist.get(i).getPrice() + "");
((LinerHolder)viewHolder).shu.setText("销量:" + mlist.get(i).getSalenum()+"");
//字符串截取
String images = mlist.get(i).getImages();
String[] split = images.split("\\|");
for (int j = 0; j < images.length(); j++) {
Glide.with(context).load(split[0]).into(((LinerHolder) viewHolder).img);
}
}else{
((GridHolder)viewHolder).ming2.setText(mlist.get(i).getTitle());
((GridHolder)viewHolder).jiage2.setText("价格:" + mlist.get(i).getPrice() + "");
((GridHolder)viewHolder).shu2.setText("销量:" + mlist.get(i).getSalenum());
String images = mlist.get(i).getImages();
String[] split = images.split("\\|");
for (int j = 0; j < images.length(); j++) {
Glide.with(context).load(split[0]).into(((GridHolder) viewHolder).img2);
}
}
viewHolder.itemView.setTag(i);
}
@Override
public int getItemCount() {
return mlist.size();
}
//重写的这个方法
@Override
public int getItemViewType(int position) {
return type;
}
class LinerHolder extends RecyclerView.ViewHolder{
private ImageView img;
private TextView ming;
private TextView jiage;
private TextView shu;
public LinerHolder(@NonNull View itemView) {
super(itemView);
img = itemView.findViewById(R.id.img);
ming = itemView.findViewById(R.id.ming);
jiage = itemView.findViewById(R.id.jiage1);
shu = itemView.findViewById(R.id.shu);
}
}
class GridHolder extends RecyclerView.ViewHolder{
private ImageView img2;
private TextView ming2;
private TextView jiage2;
private TextView shu2;
public GridHolder(@NonNull View itemView) {
super(itemView);
img2 = itemView.findViewById(R.id.img2);
ming2 = itemView.findViewById(R.id.ming2);
jiage2 = itemView.findViewById(R.id.jiage2);
shu2 = itemView.findViewById(R.id.shu2);
}
}
//接口回调
public interface ItemClick {
void setOnClick(View view, int position);
}
private ItemClick itemClick;
public void setOnClickListennr(ItemClick itemClick) {
this.itemClick = itemClick;
}
@Override
public void onClick(View v) {
if (itemClick != null) {
itemClick.setOnClick(v, (int) v.getTag());
}
}
}
4.MainActivity:
public class MainActivity extends BaseActivity implements IView, View.OnClickListener {
private String mUrl = "http://www.zhaoapi.cn/product/searchProducts?keywords=%E6%89%8B%E6%9C%BA&page=1&sort=";
private List<MyData.DataBean> mlist = new ArrayList<>();
private PresenterImpe presenterImpe;
private RecyclerView recyclerView;
private MyAdapter adapter;
private Button retu;
private EditText sousuo;
private Button qh;
private boolean b = true;
private Button zonghe;
private Button xiaoliang;
private Button jiage;
private Button shaixuan;
@Override
protected int getLayout() {
return R.layout.activity_main;
}
@Override
protected void initViews() {
retu = findViewById(R.id.retu);
sousuo = findViewById(R.id.sousuo);
qh = findViewById(R.id.qh);
zonghe=findViewById(R.id.zonghe);
xiaoliang=findViewById(R.id.xiaoliang);
jiage=findViewById(R.id.jiage);
shaixuan=findViewById(R.id.shaixuan);
recyclerView = findViewById(R.id.Recy);
//线性布局
LinearLayoutManager manager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(manager);
adapter = new MyAdapter(this, mlist);
adapter.setType(1);
recyclerView.setAdapter(adapter);
//条目点击事件
adapter.setOnClickListennr(new MyAdapter.ItemClick() {
@Override
public void setOnClick(View view, int position) {
Intent intent=new Intent(MainActivity.this,XQActivity.class);
intent.putExtra("name",mlist.get(position).getTitle());
intent.putExtra("price",mlist.get(position).getPrice()+"");
startActivityForResult(intent,200);
}
});
}
@Override
protected void setOnClick() {
retu.setOnClickListener(this);
sousuo.setOnClickListener(this);
qh.setOnClickListener(this);
zonghe.setOnClickListener(this);
xiaoliang.setOnClickListener(this);
jiage.setOnClickListener(this);
shaixuan.setOnClickListener(this);
}
@Override
protected void pageLogic() {
presenterImpe = new PresenterImpe(this);
presenterImpe.getData(mUrl+"0");
}
@Override
public void success(Object data) {
mlist.addAll((Collection<? extends MyData.DataBean>) data);
adapter.notifyDataSetChanged();
}
@Override
public void error(String error) {
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.retu:
finish();
break;
case R.id.sousuo:
break;
//切换按钮
case R.id.qh:
if (b == false) {
LinearLayoutManager manager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(manager);
adapter.setType(1);
adapter.notifyDataSetChanged();
b = true;
} else if (b == true) {
GridLayoutManager manager1 = new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(manager1);
adapter.setType(0);
adapter.notifyDataSetChanged();
b = false;
}
break;
//按综合排序
case R.id.zonghe:
mlist.clear();
presenterImpe.getData(mUrl+"0");
break;
//按销量排序
case R.id.xiaoliang:
mlist.clear();
presenterImpe.getData(mUrl+"1");
break;
//按价格排序
case R.id.jiage:
mlist.clear();
presenterImpe.getData(mUrl+"2");
break;
}
}
}