RecycleView的简单实现

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

首先,先导依赖

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

xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <Button
            android:id="@+id/add"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="添加"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/delete"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="删除"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/list"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="List"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/grid"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Grid"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/flow"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Flow"
            android:layout_weight="1"/>
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/recycleView"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/image"
        android:src="@mipmap/ic_launcher"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/tv"
        android:gravity="center"
        android:text="啊哈哈哈哈哈"
        app:layout_constraintLeft_toRightOf="@+id/image"
        android:textSize="20sp"/>
</LinearLayout>

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<String> 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<Madapter.ViewHolder> {
    private final MainActivity mainActivity;
    private final List<String> dlist;

    public Madapter(MainActivity mainActivity, List<String> 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;
    }
}

猜你喜欢

转载自blog.csdn.net/KWON_QMY/article/details/84100594
今日推荐