day01_Recyclerview

本文介绍了RecyclerView的三种效果:线性、网格和瀑布流,并对比ListView阐述了RecyclerView的优势,如支持多布局和动态插拔功能。详细讲解了RecyclerView的重要方法,包括设置横向滑动、数据更新动画、多布局展示等。同时,提到了常见的布局管理器如LinearLayoutManager、GridLayoutManager和StaggeredGridLayoutManager,以及如何添加分割线和动画。最后,提到了依赖库的导入和一个案例应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Recyclerview

3种效果:
线性/网格/瀑布流

Recyclerview
RecyclerView比ListView的优势:
1.RecyclerView比listview实现效果更多
2.RecycelrView支持多布局;
3.RecyclerView根据项目需要插拔功能
RecyclerView默认不支持点击事件->程序员代码中通过回调接口的方式添加监听

重要的方法

1.RecyclerView横向滑动:
LinearLayoutManager.HORIZONTAL横向滑动LinearLayoutManager.VERTICAL垂直滑动

2.RecyclerView.Adapter中刷新方法区别:
notifyDataSetChanged();整体刷新+没有动画效果
notifyItemInserted(int position,Object data):有动画效果+添加一条数据在position位置
notifyItemRemoved(position);有动画效果+删除一条数据并刷新
注意:当添加和删除的时候,要更新下标,不然有错位现象
3.RecyclerView多布局展示:
public int getItemViewType(int position)返回当前数据的itemview类型
4.RecyclerView常见方法:
LinearLayoutManager:recyclerview线性管理器(垂直水平方向);
GridLayoutManager:网格布局管理器;
StaggeredGridLayoutManager:瀑布流布局管理器;
RecyclerView.setLayoutManager(LayoutManager manager):添加布局管理器
RecyclerView.addItemDecoration(ItemDecoration decoration):添加分割线
RecyclerView.setItemAnimator(ItemAnimator animator):添加动画方法
RecyclerView.setAdapter(Adapter adapter):添加适配器

导入依赖
implementation ‘com.android.support:recyclerview-v7:28.0.0’

在这里插入图片描述
在这里插入图片描述
案例快手

//主类
public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    ArrayList<Bean.DataBean> list=new ArrayList<>();
    MainAdapter adapter;

    @SuppressLint("HandlerLeak")
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what==101){
                String s=(String)msg.obj;
                Gson gson=new Gson();
                Bean bean = gson.fromJson(s, Bean.class);
                List<Bean.DataBean> data = bean.getData();
                list.addAll(data);

                adapter=new MainAdapter(list,MainActivity.this);
                 //线性布局       
  	//final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
       // linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        //网格布局
       // GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
				//瀑布流效果
                StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
                recyclerView.setLayoutManager(staggeredGridLayoutManager);
                        //设置分割线
//        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);
//        rv.addItemDecoration(dividerItemDecoration);

                //设置动画
                DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator();
                defaultItemAnimator.setRemoveDuration(2000);//设置延迟2秒删除的效果
                defaultItemAnimator.setAddDuration(2000);
                recyclerView.setItemAnimator(defaultItemAnimator);

                recyclerView.setAdapter(adapter);
				
				//利用接口回调
                adapter.setMyOnItemClickListener(new MyOnItemClickListener() {
                    @Override
                    public void myonItemClickListener(int position) {
                        list.remove(position);
                        adapter.notifyItemRemoved(position);
                        adapter.notifyItemRangeChanged(0,list.size());
                    }
                });

            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView=findViewById(R.id.rv);
        new MyThread(MainActivity.this).start();

    }
}

//适配器类
public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainViewHolder> {

    ArrayList<Bean.DataBean> arrayList;
    MainActivity context;
    MyOnItemClickListener myOnItemClickListener;

    public void setMyOnItemClickListener(MyOnItemClickListener myOnItemClickListener) {
        this.myOnItemClickListener = myOnItemClickListener;
    }

    public MainAdapter(ArrayList<Bean.DataBean> arrayList, MainActivity context) {
        this.arrayList = arrayList;
        this.context = context;
    }

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

    @Override
    public void onBindViewHolder(@NonNull MainViewHolder viewHolder, final int i) {
        Glide.with(context).load(arrayList.get(i).getCdn_img()).into(viewHolder.imageView);
        Glide.with(context).load(arrayList.get(i).getProfile_image()).apply(RequestOptions.bitmapTransform(new CircleCrop())).into(viewHolder.imageView1);
        WindowManager windowManager = context.getWindowManager();
        float width = windowManager.getDefaultDisplay().getWidth()/2;
        float wid = Float.parseFloat(arrayList.get(i).getWidth());
        float bili=wid/width;

        float height = Float.parseFloat(arrayList.get(i).getHeight());
        float gao=height/bili;

        ViewGroup.LayoutParams layoutParams = viewHolder.imageView.getLayoutParams();
        layoutParams.height= (int) gao;
        viewHolder.imageView.setLayoutParams(layoutParams);

        viewHolder.textView.setText("♥:"+arrayList.get(i).getLove());
        viewHolder.textView1.setText(arrayList.get(i).getText());
        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                arrayList.remove(i);
//                notifyItemRemoved(i);
//                notifyItemRangeChanged(0,arrayList.size());
                myOnItemClickListener.myonItemClickListener(i);
            }
        });
    }

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

    class MainViewHolder extends RecyclerView.ViewHolder{
        ImageView imageView;
        TextView textView;
        TextView textView1;
        ImageView imageView1;
        public MainViewHolder(@NonNull View itemView) {
            super(itemView);
            this.imageView=itemView.findViewById(R.id.iv);
            this.textView=itemView.findViewById(R.id.tv);
            this.textView1=itemView.findViewById(R.id.tv1);
            this.imageView1=itemView.findViewById(R.id.iv_tou);
        }
    }


}

//接口

public interface MyOnItemClickListener {
    public void myonItemClickListener(int position);
}
//下载串的线程
public class MyThread extends Thread {
    MainActivity activity;

    public MyThread(MainActivity activity) {
        this.activity = activity;
    }

    @Override
    public void run() {
        super.run();
        try {
            URL url=new URL("https://www.apiopen.top/satinApi?type=1&page=2");
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.connect();
            if (urlConnection.getResponseCode()==200){
                InputStream inputStream = urlConnection.getInputStream();
                BufferedReader br=new BufferedReader(new InputStreamReader(inputStream));
                String str=null;
                StringBuffer sb=new StringBuffer();
                while ((str=br.readLine())!=null){
                    sb.append(str);
                }
                String string = sb.toString();
                Message message = Message.obtain();
                message.what=101;
                message.obj=string;
                activity.handler.sendMessage(message);

            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
//谷歌插件写Bean类
//行布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:orientation="vertical"
                android:padding="10dp"
              android:layout_height="match_parent">
    <ImageView android:layout_width="150dp"
               android:id="@+id/iv"
               android:padding="3dp"
               android:scaleType="fitXY"
               android:layout_height="wrap_content"/>
    <ImageView android:layout_width="50dp"
               android:id="@+id/iv_tou"
               android:layout_height="50dp"/>
    <TextView android:layout_width="100dp"
              android:layout_marginLeft="50dp"
              android:layout_marginTop="-50dp"
              android:id="@+id/tv1"
              android:textSize="8dp"
              android:layout_height="50dp"/>
    <TextView android:layout_width="150dp"
              android:id="@+id/tv"
              android:gravity="right"
              android:layout_height="50dp"/>

</LinearLayout>

//主界面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    <android.support.v7.widget.RecyclerView
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>


</LinearLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值