RecyclerView学习笔记整理(1)简单了解及使用

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 RecyclerView学习笔记整理(1)简单了解及使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

之前就学习过RecyclerView趁现在有时间需要对其进行整理一下然后再去学习BRACH这个框架。

RecyclerView简介
该RecyclerView widget是一种更先进的柔性版的ListView。这个小工具是一个容器,用于显示,能非常有效地维护了意见数量有限,滚动大的数据集。使用 RecyclerView当你拥有的数据的集合,它的元素在运行时改变基于用户行为和网络事件的小部件。

该RecyclerView类简化,提供显示和处理大数据集:

定位项目布局管理器

默认的动画为公用项的操作,例如删除或增加的项目

您还可以在自定义的布局管理器和动画的灵活性RecyclerView部件。

要使用RecyclerView小部件,你必须指定一个适配器和一个布局管理器。要创建一个适配器,扩展RecyclerView.Adapter类。实施的细节取决于你的数据集的具体情况和意见的类型。欲了解更多信息,请参见示例如下。

布局管理器 A的内部位置的项目意见RecyclerView,并确定何时再利用项目的看法不再对用户可见。重用(或回收)的图,布局管理器可能会问适配器与数据集不同的元素替换视图的内容。以这种方式回收的观点提高通过避免产生不必要的视图或执行昂贵性能findViewById()的查找。

RecyclerView提供这些内置的布局管理器:

LinearLayoutManager 显示在垂直或水平滚动列表项。

GridLayoutManager 显示在网格中的项目。

StaggeredGridLayoutManager 显示了交错网格项目。

要创建自定义布局管理器,扩展RecyclerView.LayoutManager类。

动画

动画的添加和删除项目中默认启用的RecyclerView。要自定义这些动画,延长 RecyclerView.ItemAnimator类,并使用RecyclerView.setItemAnimator() 方法。

以上内容来自 Google官方文档 的翻译。
从build中导入

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

注意:这个recyclerview的版本根据你自己的sdkVersion的版本来改变即可。

关于item的布局问题可以参考这篇文章:关于recycleview的item的布局问题
关于recycleview 滑动item变长(item变形)问题

首先我们来写一个MainActivity

这里有关Adapter和LayoutManager布局管理控制的一个

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
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 java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
	private RecyclerView mRecyclerView;
	private MyAdapter mMyAdapter;//导入自己的适配器这个自己写即可
	private RecyclerView.LayoutManager mLayoutManager;//RecyclerView的LayoutManger布局管理器

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initData();
		initView();
	}
	private void initData() {
		mLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
		//三种布局管理器的垂直布局,HORIZONTAL是横向布局
/*		mLayoutManager = new LinearLayoutManager(this, GridLayoutManager.VERTICAL, false);
		mLayoutManager = new LinearLayoutManager(this, StaggeredGridLayoutManager.VERTICAL, false);
		mLayoutManager = new LinearLayoutManager(this, StaggeredGridLayoutManager.HORIZONTAL, false);*/
		mMyAdapter = new MyAdapter(getData());
	}
	private void initView() {
		mRecyclerView = (RecyclerView) findViewById(R.id.recycle);
		// 设置布局管理器
		mRecyclerView.setLayoutManager(mLayoutManager);
		// 设置adapter
		mRecyclerView.setAdapter(mMyAdapter);
	}
	private ArrayList<String> getData() {

		//新建RecyclerView的item条目数可以自行更改后面将写入Adapter中

		ArrayList<String> data = new ArrayList<>();
		String temp = " 这里是条目";
		String tx   = "新建item后可以看见";

		for(int i = 1; i < 21; i++) {
			data.add(i + temp+tx+i);
		}

		return data;
	}

}

我们再来写一个Adapter

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 MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

	private ArrayList<String> mData;
	public MyAdapter(ArrayList<String> data) {
		this.mData = data;
	}
	public void updateData(ArrayList<String> data) {
		this.mData = data;
		notifyDataSetChanged();
	}

	@Override
	public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
		// 实例化展示的view
		View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout,parent,false);
		// 实例化viewholder
		ViewHolder viewHolder = new ViewHolder(v);
		return viewHolder;
	}

	@Override
	public void onBindViewHolder(ViewHolder holder, int position) {
		// 绑定数据
		holder.mTv.setText(mData.get(position));
//给其定义一个布局,用来控制Recyview的item的一个布局,不然感觉起来有点怪怪的
		ViewGroup.LayoutParams layoutParams = holder.itemView.getLayoutParams();
		layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
		layoutParams.width  = ViewGroup.LayoutParams.WRAP_CONTENT;

		holder.itemView.setLayoutParams(layoutParams);
	}

	@Override
	public int getItemCount() {
		return mData == null ? 0 : mData.size();
	}


	public static class ViewHolder extends RecyclerView.ViewHolder {

		TextView mTv;

		public ViewHolder(View itemView) {
			super(itemView);
			mTv = (TextView) itemView.findViewById(R.id.item_text);

		}
	}
}


我们再来看看activity_main

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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="com.beta.recycle.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycle"
        android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

##最后是item_layout的关于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">
<TextView
    android:id="@+id/item_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="1111111"/>
</LinearLayout>

好了现在我们就实现了一个非常非常简单而又基础的RecyclerView的使用。
参考文章:
https://blog.csdn.net/li15225271052/article/details/54318704
https://www.jianshu.com/p/4fc6164e4709

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134157.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!