034_Andorid RecyclerView

RecyclerView

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

基本使用

效果图

8917395-ba917120e27d107b.gif

效果图.gif

 

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、付费专栏及课程。

余额充值