RecycleView的简单实现

RecycleView是Android5.0出现的新控件,替换listview
RecycleView采用的是MVC适配器模式,提供了一种插拔式的体验,高度解耦,异常灵活,可以通过布局管理器实现很多种效果(垂直,水平瀑布流的效果,功能强大)

首先,先导依赖

implementation 'com.android.support:recyclerview-v7:28.0.0'

xml布局




    
        



    
    


import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.ContextMenu;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.bwie.recycleview.adapter.Madapter;

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

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button add;
    private Button delete;
    private Button list;
    private Button grid;
    private Button flow;
    List dlist;
    Madapter madapter;
    private RecyclerView recycleView;

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

        //初始化数据
        initData();
    }

    private void initData() {
        dlist = new ArrayList<>();
        for (int i=0; i<20;i++){
            dlist.add("content_"+i);
        }
        //适配器
        madapter = new Madapter(this,dlist);
        recycleView.setAdapter(madapter);

        //布局管理器
        recycleView.setLayoutManager(new LinearLayoutManager(this,LinearLayout.VERTICAL,false));
        //增加,移除动画
        recycleView.setItemAnimator(new DefaultItemAnimator());

        //条目点击
        madapter.setItemClick(new Madapter.ItemClick() {
            @Override
            public void itemc(View view,int Position) {
                Toast.makeText(MainActivity.this,"哈哈哈哈哈"+Position,Toast.LENGTH_SHORT).show();
            }
        });


    }

    private void initView() {
        add = (Button) findViewById(R.id.add);
        delete = (Button) findViewById(R.id.delete);
        list = (Button) findViewById(R.id.list);
        grid = (Button) findViewById(R.id.grid);
        flow = (Button) findViewById(R.id.flow);
        recycleView = (RecyclerView) findViewById(R.id.recycleView);



        add.setOnClickListener(this);
        delete.setOnClickListener(this);
        list.setOnClickListener(this);
        grid.setOnClickListener(this);
        flow.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.add:
                madapter.addDatas(0);
                recycleView.scrollToPosition(0);
                break;
            case R.id.delete:
                madapter.removeDatas(0);
              //  recycleView.scrollToPosition(0);
                break;
            case R.id.list:
               //布局管理器
                recycleView.setLayoutManager(new LinearLayoutManager(this,LinearLayout.VERTICAL,false));
                //添加分割线
                recycleView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
                break;
            case R.id.grid:
                recycleView.setLayoutManager(new GridLayoutManager(this,3));

                break;
            case R.id.flow:
                //瀑布流
                //StaggeredGridLayoutManager.VERTICAL代表有多少列;
                // StaggeredGridLayoutManager.HORIZONTAL代表有多少行
                recycleView.setLayoutManager(new StaggeredGridLayoutManager
                        (4, StaggeredGridLayoutManager.VERTICAL));
                break;
        }
    }
}

适配器


import android.media.Image;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bwie.recycleview.MainActivity;
import com.bwie.recycleview.R;

import java.util.List;

/**
 * date:2018/11/14
 * author:QMY(QMY)
 * function:
 */
public class Madapter extends RecyclerView.Adapter {
    private final MainActivity mainActivity;
    private final List dlist;

    public Madapter(MainActivity mainActivity, List dlist) {
        this.mainActivity = mainActivity;
        this.dlist = dlist;
    }

    @NonNull
    @Override
    //创建viewholder
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = View.inflate(mainActivity, R.layout.item_list, null);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
        viewHolder.tv.setText(dlist.get(i));

        //条目点击事件
        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int layoutPosition = viewHolder.getLayoutPosition();
                mItemClick.itemc(viewHolder.itemView,layoutPosition);
            }
        });
    }

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

    public void addDatas(int i) {
        dlist.add(i,"HAHAHAHA");
        notifyItemInserted(i);
    }

    public void removeDatas(int i) {
        dlist.remove(i);
        notifyItemRemoved(i);
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView image;
        TextView tv;
        public ViewHolder(@NonNull final View itemView) {
            super(itemView);

            image = itemView.findViewById(R.id.image);
            tv = itemView.findViewById(R.id.tv);

        }
    }

    //定义接口
    public interface ItemClick{
        void  itemc(View view,int Position);

    }

    public ItemClick mItemClick;

    public void setItemClick(ItemClick itemClick){
        mItemClick=itemClick;
    }
}

你可能感兴趣的:(RecycleView的简单实现)