Recyclerview

ecyclerview

1.Recyclerview比listview的优势:

2.Recyclerview支持多布局

3.RecycleView根据需要的插架

1.代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".day00000007.Main5Activity"
    android:orientation="vertical">
    <Button
        android:text="网格"
        android:onClick="wang"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:text="线性"
        android:onClick="xian"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:onClick="pu"
        android:text="瀑布"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/main_RV"/>
</LinearLayout>

//java代码

package com.example.administrator.myapplication.day00000007;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
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 com.example.administrator.myapplication.R;

import java.util.ArrayList;

public class Main5Activity extends AppCompatActivity {
    private RecyclerView rv;
    private ArrayList<Student> list=new ArrayList<>();
    private MainAdapter mainApter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main5);
        rv=findViewById(R.id.main_RV);
        list.add(new Student(R.mipmap.qwjpeg,"见风使舵"));
        list.add(new Student(R.mipmap.c1,"二恶烷"));
        list.add(new Student(R.mipmap.c4,"最幸福"));
        list.add(new Student(R.mipmap.c22,"一会卡洛斯"));
        list.add(new Student(R.mipmap.c4,"见风使舵"));
        list.add(new Student(R.mipmap.c1,"二恶烷"));
        list.add(new Student(R.mipmap.c1,"最幸福"));
        list.add(new Student(R.mipmap.c1,"一会卡洛斯"));
        list.add(new Student(R.mipmap.cc1,"见风使舵"));
        list.add(new Student(R.mipmap.cc1,"二恶烷"));
        list.add(new Student(R.mipmap.cc3,"最幸福"));
        list.add(new Student(R.mipmap.c4,"一会卡洛斯"));
        list.add(new Student(R.mipmap.c1,"见风使舵"));
        list.add(new Student(R.mipmap.qwjpeg,"二恶烷"));





        DefaultItemAnimator defaultItemAnimator=new DefaultItemAnimator();
        defaultItemAnimator.setRemoveDuration(2000);
        defaultItemAnimator.setAddDuration(2000);
        rv.setItemAnimator(defaultItemAnimator);

        DividerItemDecoration dividerItemDecoration=new DividerItemDecoration(Main5Activity.this,DividerItemDecoration.VERTICAL);
        rv.addItemDecoration(dividerItemDecoration);

        mainApter=new MainAdapter(list,Main5Activity.this);
        rv.setAdapter(mainApter);
    }

    public void wang(View view) {
        GridLayoutManager gridLayoutManager=new GridLayoutManager(Main5Activity.this,2);
        rv.setLayoutManager(gridLayoutManager);
    }

    public void xian(View view) {
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(Main5Activity.this);
        rv.setLayoutManager(linearLayoutManager);
    }

    public void pu(View view) {
        StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        rv.setLayoutManager(staggeredGridLayoutManager);
    }
}

//适配器

package com.example.administrator.myapplication.day00000007;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.bumptech.glide.request.RequestOptions;
import com.example.administrator.myapplication.R;

import java.util.ArrayList;

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainViewHolder> {
    private ArrayList<Student> list;
    private Context context;


    public MainAdapter(ArrayList<Student> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @NonNull
    @Override
    public MainViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view= LayoutInflater.from(context).inflate(R.layout.tab4,null);
        return new MainViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final MainViewHolder mainViewHolder, final int i) {
        mainViewHolder.ivv.setImageResource(list.get(i).getSrc());

        mainViewHolder.tvvv.setText(list.get(i).getTitle());
        mainViewHolder.ivv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "被点击了", Toast.LENGTH_SHORT).show();
                list.remove(i);
                notifyItemRemoved(i);
                notifyItemChanged(0,list.size());
            }
        });

    }

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

    class MainViewHolder extends RecyclerView.ViewHolder{
        private ImageView ivv;
        private TextView tvvv;
        public MainViewHolder(@NonNull View itemView) {
            super(itemView);
            this.ivv=itemView.findViewById(R.id.ivv);
            this.tvvv=itemView.findViewById(R.id.tvvv);
            ViewGroup.LayoutParams layoutParams=ivv.getLayoutParams();
            layoutParams.height=(int)(Math.random()*200+300);
            ivv.setLayoutParams(layoutParams);
        }
    }
}

//item布局

<?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="match_parent"
    android:orientation="vertical">
    <ImageView
        android:layout_margin="10dp"
        android:scaleType="centerCrop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ivv"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tvvv"/>

</LinearLayout>

//实体类

package com.example.administrator.myapplication.day00000007;

import android.widget.TextView;

class Student {
    private int src;
    private String title;

    public Student(int src, String title) {
        this.src = src;
        this.title = title;
    }

    public int getSrc() {
        return src;
    }

    public String getTitle() {
        return title;
    }

    public void setSrc(int src) {
        this.src = src;
    }

    @Override
    public String toString() {
        return "student{" +
                "src=" + src +
                ", title='" + title + '\'' +
                '}';
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

//运行效果

1.网格

2.线性布局

3.瀑布流

 

 

*******多布局

  • RecyclerView.ViewHolder:由于进行多布局操作
  • 需要多个ViewHolder对象对应过个xml布局
  • 自定义ViewHolder父类
  • 1.布局
  • <?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"
        tools:context=".MainActivity"
        android:orientation="vertical">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv"
            android:layout_weight="8"
            android:layout_width="match_parent"
            android:layout_height="0dp"></android.support.v7.widget.RecyclerView>
        <Button
            android:text="发送"
            android:id="@+id/bt_send"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="0dp" />
    </LinearLayout>
  • 2.java代码
  • package com.example.administrator.myapplication2;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.view.View;
    import android.widget.Button;
    
    import java.util.ArrayList;
    
    public class MainActivity extends AppCompatActivity {
        RecyclerView recyclerView;
        QQAdapter qqAdapter;
        ArrayList<Message> list=new ArrayList<>();
    
        Button button;
        LinearLayoutManager linearLayoutManager;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            recyclerView=findViewById(R.id.rv);
            button=findViewById(R.id.bt_send);
            list.add(new Message("周星驰",0));
            list.add(new Message("nihaof",1));
            list.add(new Message("nihaoma",0));
            list.add(new Message("nihaoma",0));
              list.add(new Message("nihaod",1));
              qqAdapter=new QQAdapter(list,MainActivity.this);
              recyclerView.setAdapter(qqAdapter);
            linearLayoutManager = new LinearLayoutManager(this);
            recyclerView.setLayoutManager(linearLayoutManager);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    list.add(new Message("你挣好时代DJ",1));
                    qqAdapter.notifyDataSetChanged();
                    linearLayoutManager.scrollToPosition(list.size()-1);
                }
            });
        }
    }
    
  • //适配器代码
  • package com.example.administrator.myapplication2;
    
    import android.content.Context;
    import android.support.annotation.NonNull;
    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;
    
    public class QQAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
        ArrayList<Message> list;
        Context context;
    
        public QQAdapter(ArrayList<Message> list, Context context) {
            this.list = list;
            this.context = context;
        }
        //TODO 根据下标 返回类型
        @Override
        public int getItemViewType(int position) {
            return list.get(position).getType();
        }
        //TODO  创建ViewHolder
    
        @NonNull
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    
            if(i==0){
                View view = LayoutInflater.from(context).inflate(R.layout.qq_left, viewGroup, false);
                return  new LeftViewHolder(view);
            }else   if(i==1){
                View view = LayoutInflater.from(context).inflate(R.layout.qq_right, viewGroup, false);
                return  new RightViewHolder(view);
            }
            return null;
        }
    
        @Override
        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
    
            if(getItemViewType(i)==0){
                LeftViewHolder leftViewHolder= (LeftViewHolder) viewHolder;
                leftViewHolder.textView.setText(list.get(i).getMessage());
            }else if(getItemViewType(i)==1){
                RightViewHolder rightViewHolder= (RightViewHolder) viewHolder;
                rightViewHolder.textView.setText(list.get(i).getMessage());
            }
        }
    
        @Override
        public int getItemCount() {
            return list.size();
        }
    
    
        class LeftViewHolder extends RecyclerView.ViewHolder{
            TextView textView;
    
            public LeftViewHolder(@NonNull View itemView) {
                super(itemView);
                textView=itemView.findViewById(R.id.tv_left);
            }
        }
    
        class RightViewHolder extends RecyclerView.ViewHolder{
            TextView textView;
    
            public RightViewHolder(@NonNull View itemView) {
                super(itemView);
                textView=itemView.findViewById(R.id.tv_right);
            }
        }
    
    
    
    
    }
    
  • //左布局
  • <?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">
        <ImageView
           android:src="@mipmap/a1"
            android:id="@+id/iv_left"
            android:layout_width="50dp"
            android:layout_height="50dp" />
        <TextView
            android:id="@+id/tv_left"
            android:layout_marginTop="40dp"
            android:text="哈哈哈哈"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    </LinearLayout>
  • //右布局
  • <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
           android:src="@mipmap/a2"
            android:layout_alignParentRight="true"
            android:id="@+id/iv_right"
            android:layout_width="50dp"
            android:layout_height="50dp" />
        <TextView
            android:id="@+id/tv_right"
            android:layout_marginTop="40dp"
            android:text="哈哈哈哈"
            android:layout_toLeftOf="@+id/iv_right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </RelativeLayout>
  • //实体类
  • package com.example.administrator.myapplication2;
    
    class Message {
        String message;//消息
        int type;//类型 0或者1  0代表左  1代表右
    
        public Message(String message, int type) {
            this.message = message;
            this.type = type;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public int getType() {
            return type;
        }
    
        public void setType(int type) {
            this.type = type;
        }
    }
    
  • //效果图
  •  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值