RecyclerView简单多布局使用

自动复用
支持网格布局、线性布局、瀑布流布局
支持动画和多布局
支持自定义分割线

MainActivity类import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;

import com.alibaba.fastjson.JSON;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.Response;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private RecyclerView rv_food;
private List<FoodBean.DataBean> list = new ArrayList<>();
private Button line;
private Button grid;
private Button falls;

private LinearLayoutManager linearLayoutManager;
private GridLayoutManager gridLayoutManager;
private StaggeredGridLayoutManager staggeredGridLayoutManager;

private MyRecyclerViewAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    initData();
}

private void initData() {
    //网络请求获得数据
    OkGo.<String>get("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1").execute(new StringCallback() {
        @Override
        public void onSuccess(Response<String> response) {
            FoodBean foodBean = JSON.parseObject(response.body(), FoodBean.class);
            list.addAll(foodBean.getData());
            adapter.notifyDataSetChanged();
        }
    });
}

private void initView() {
    rv_food = findViewById(R.id.rv_food);
    line = (Button) findViewById(R.id.line);
    line.setOnClickListener(this);
    grid = (Button) findViewById(R.id.grid);
    grid.setOnClickListener(this);
    falls = (Button) findViewById(R.id.falls);
    falls.setOnClickListener(this);
    linearLayoutManager = new LinearLayoutManager(this);
    gridLayoutManager = new GridLayoutManager(this, 4);
    staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);

    adapter = new MyRecyclerViewAdapter(MainActivity.this, list);
    //设置适配器
    rv_food.setAdapter(adapter);
    //设置布局方式
    rv_food.setLayoutManager(linearLayoutManager);
    //设置分割线
    rv_food.addItemDecoration(new DividerItemDecoration(MainActivity.this, DividerItemDecoration.VERTICAL));
    DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator();
    defaultItemAnimator.setRemoveDuration(500); //设置两秒内慢慢删除
    //设置删除动画
    rv_food.setItemAnimator(defaultItemAnimator);

    adapter.setListener(new ItemOnClickListener() {
        @Override
        public void clickListener(int position) {
            list.remove(position);
            //删除视图
            adapter.notifyItemRemoved(position);
            //重新整理下标
            adapter.notifyItemRangeChanged(0,list.size());
        }
    });
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.line:
            rv_food.setLayoutManager(linearLayoutManager);
            break;
        case R.id.grid:
            rv_food.setLayoutManager(gridLayoutManager);
            break;
        case R.id.falls:
            rv_food.setLayoutManager(staggeredGridLayoutManager);
            break;
    }
}

}

MyRecyclerViewAdapter类import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;

import java.util.List;

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.MyViewHolder> {

private Context context;
private List<FoodBean.DataBean> list;
private ItemOnClickListener listener;

public MyRecyclerViewAdapter(Context context, List<FoodBean.DataBean> list) {
    this.context = context;
    this.list = list;
}

/***
 * 创建自己ViewHolder的方法
 * @param parent
 * @param viewType
 * @return
 */
@NonNull
@Override
public MyRecyclerViewAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    if (viewType == 0) {
        //加载的行布局
        View view = LayoutInflater.from(context).inflate(R.layout.rv_food_item_layout_left, parent, false);
        return new MyViewHolder(view);
    } else {
        View view = LayoutInflater.from(context).inflate(R.layout.rv_food_item_layout_right, parent, false);
        return new MyViewHolder(view);
    }
}

/***
 * 为每一行设置数据
 * @param holder
 * @param position
 */
@Override
public void onBindViewHolder(@NonNull MyRecyclerViewAdapter.MyViewHolder holder, final int position) {
    Glide.with(context)
            .load(list.get(position).getPic())
            .apply(RequestOptions.bitmapTransform(new RoundedCorners(20)))
            .into(holder.imageView);
    holder.textView.setText(list.get(position).getTitle());

    //设置条目的监听
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            listener.clickListener(position);
        }
    });
}

/***
 *
 * 根据位置返回要加载视图的类型
 * @param position
 * @return
 */
@Override
public int getItemViewType(int position) {
    return position % 2;
}

/***
 * 获得条目总数
 * @return
 */
@Override
public int getItemCount() {
    return list.size();
}

/***
 * 自定义的ViewHolder类
 */
class MyViewHolder extends RecyclerView.ViewHolder {
    ImageView imageView;
    TextView textView;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        imageView = itemView.findViewById(R.id.imageView);
        textView = itemView.findViewById(R.id.textView);
    }
}

public ItemOnClickListener getListener() {
    return listener;
}

public void setListener(ItemOnClickListener listener) {
    this.listener = listener;
}

}
ItemOnClickListener类public interface ItemOnClickListener {
void clickListener(int position);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值