recyclerView三种管理器和删除添加功能

来源:互联网 发布:网络电视客户端 编辑:程序博客网 时间:2024/06/04 01:06

下面就是大家需要的效果了,当然了这个效果是动态的呦,那就希望大家不要懒,自己试试看喽,效果很炫的呦


首先在module中的bulid.gradle中导入依赖

compile 'com.android.support:recyclerview-v7:25.0.0' 
然后同步一下

在主activity中写布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.bwie.test.liumengxin1508a20171013.MainActivity">

    <LinearLayout
        android:id="@+id/tou"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="cz"
            android:text="添加" />

        <Button
            android:id="@+id/del"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="cz"
            android:text="删除" />

        <Button
            android:id="@+id/list"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="cz"
            android:text="List" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/grid"
            android:onClick="cz"
            android:text="Grid" />

        <Button
            android:id="@+id/flow"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="cz"
            android:text="flow" />
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview_vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/tou" />
</RelativeLayout>

你可以先想好自己需要展示的布局文件,也可以先写适配器,在这里我先写的布局文件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="#8A2BE2"
    android:layout_margin="3dp"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/id_num"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="1" />
</FrameLayout>
然后写自己的适配器,其中的获取随机高度,主要是为了瀑布流准备的

package com.bwie.test.liumengxin1508a20171013;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

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

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
    Context mcontext;
    List<String> mlist;
    List<Integer> mheight;
    public MyAdapter(Context context, List<String> list) {
        mcontext=context;
        mlist=list;
        //随机高度集合
        mheight=new ArrayList<Integer>();
        for(int i=0;i<mlist.size();i++){
            mheight.add((int)(100+Math.random()*300));
        }
    }




    @Override
    public int getItemCount() {

        return mlist.size();
    }


    //找到布局中空间位置
    class MyViewHolder extends RecyclerView.ViewHolder{
        TextView tv;
        public MyViewHolder(View arg0) {
            super(arg0);

            tv=(TextView) arg0.findViewById(R.id.id_num);
        }

    }


    //绑定,渲染数据到view中
    @Override
    public void onBindViewHolder(MyViewHolder holder, int arg1) {

        ViewGroup.LayoutParams lp=holder.tv.getLayoutParams();
        lp.height=mheight.get(arg1);
        holder.tv.setLayoutParams(lp);
        holder.tv.setText(mlist.get(arg1));



    }



    //先执行onCreateViewHolder
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int arg1) {

        MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                mcontext).inflate(R.layout.item, parent,
                false));
        return holder;
    }




    public void add(int pos) {

        mlist.add(pos, "insert");
        mheight.add((int)(100+Math.random()*300));
        notifyItemInserted(pos);
    }




    public void del(int pos) {

        mlist.remove(pos);
        notifyItemRemoved(pos);
    }


}


下面就是大招主activity中的数据代码了


package com.bwie.test.liumengxin1508a20171013;

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.View;

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

public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    List<String> mlist;
    MyAdapter adapter;
    RecyclerView.LayoutManager LayoutManager;

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

        initview();

    }

    private void initview() {
        recyclerView = (RecyclerView) findViewById(R.id.recyclerview_vertical);
        adapter = new MyAdapter(this, mlist);
        //设置动画
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        //设置分割线
        recyclerView.addItemDecoration(new DividerItemDecoration(
                MainActivity.this, DividerItemDecoration.HORIZONTAL));
        recyclerView.addItemDecoration(new DividerItemDecoration(
                MainActivity.this, DividerItemDecoration.VERTICAL));
        LayoutManager = new LinearLayoutManager(this);
        adapter();
    }
  //用来配置适配器的代码
    public void adapter() {
        recyclerView.setLayoutManager(LayoutManager);
        recyclerView.setAdapter(adapter);
    }

    //自定义数据
    private void initData() {
        mlist = new ArrayList<String>();
        for (int i = 0; i < 50; i++) {
            mlist.add("number" + i);
        }

    }

    //不同的点击按钮进行不同的操作
    public void cz(View v) {
        switch (v.getId()) {
            case R.id.add:
                adapter.add(1);
                break;
            case R.id.del:
                adapter.del(1);
                break;
            case R.id.list:
                LayoutManager = new LinearLayoutManager(this);
                adapter();
                break;
            case R.id.grid:
                LayoutManager = new GridLayoutManager(this, 3);
                adapter();
                break;
            case R.id.flow:
                LayoutManager = new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL);
                adapter();
                break;
        }

    }
}