第二次博客作业--RecycleView控件
这次是要在之前实现的Fragment框架中添加RecycleView控件,用于实现下拉列表、瀑布流、上拉下拉刷新的功能。
先来介绍一下什么是RecycleView:
这一段是来源于网上的资料
【Android 控件 RecyclerView】
概述
从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传统的ListView,更加强大和灵活。RecyclerView的官方定义如下:
A flexible view for providing a limited window into a large data set.
从定义可以看出,flexible(可扩展性)是RecyclerView的特点。
RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字Recyclerview即回收view也可以看出。
RecyclerView的优点
RecyclerView并不会完全替代ListView(这点从ListView没有被标记为@Deprecated可以看出),两者的使用场景不一样。但是RecyclerView的出现会让很多开源项目被废弃,例如横向滚动的ListView, 横向滚动的GridView, 瀑布流控件,因为RecyclerView能够实现所有这些功能。
RecylerView相对于ListView的优点罗列如下:
RecyclerView封装了viewholder的回收复用,也就是说RecyclerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不再是View了,复用的逻辑被封装了,写起来更加简单。
直接省去了listview中convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。
提供了一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecyclerView专门抽取出了相应的类,来控制Item的显示,使其的扩展性非常强。
先看看完成的成果吧
这个我实现了两个功能,一个是滑动功能,一个是点击返回功能
首先是要添加一个适配器
package com.example.shibin;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> {
private List mList;
private Context mContext;
public HomeAdapter(Context mContext, List<String> mList) {this.mContext = mContext;this.mList = mList;
}@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View itemView = LayoutInflater.from(mContext).inflate(R.layout.tab01_recycle_item,parent,false);return new MyViewHolder(itemView);
}@Override
public void onBindViewHolder(MyViewHolder holder, int position) {holder.nametv.setText(mList.get(position));final String content = mList.get(position);String stickyData = mList.get(position);holder.nametv.setText(stickyData);if (position == 0) {holder.nametv.setVisibility(View.VISIBLE);holder.nametv.setText(stickyData);holder.itemView.setTag(1);} else {if (!TextUtils.equals(stickyData, mList.get(position - 1))) {holder.nametv.setVisibility(View.VISIBLE);holder.nametv.setText(stickyData);holder.itemView.setTag(2);} else {holder.nametv.setVisibility(View.GONE);holder.itemView.setTag(3);}}holder.itemView.setContentDescription(stickyData);holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(mContext, "你选择了: " + content, Toast.LENGTH_SHORT).show();}});}@Override
public int getItemCount() {return mList.size();
}static class MyViewHolder extends RecyclerView.ViewHolder {private TextView nametv;public MyViewHolder(View itemView) {super(itemView);nametv = itemView.findViewById(R.id.tab01_header_view);}
}
}
然后为了显示新建的RecycleView建立一个item.xml
单独显示顶部悬浮的标题栏
添加列表显示数据,建立一个可以被选择的LinearLayout
修改一下需要修改的tab中的Fragment.java文件,例如
package com.example.shibin;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
/**
A simple {@link Fragment} subclass.
Use the {@link WeixinFragment#newInstance} factory method to
create an instance of this fragment.
*/
public class WeixinFragment extends Fragment {private List mList;
private View view;
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = “param1”;
private static final String ARG_PARAM2 = “param2”;// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;public WeixinFragment() {
// Required empty public constructor
}// TODO: Rename and change types and number of parameters
public static WeixinFragment newInstance(String param1, String param2) {
WeixinFragment fragment = new WeixinFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
private void InitRecyclerView(){
RecyclerView mRecyclerView = view.findViewById(R.id.tab01_1);HomeAdapter mHomeAdapter = new HomeAdapter(getActivity(), mList);mRecyclerView.setAdapter(mHomeAdapter);LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL,false);mRecyclerView.setLayoutManager(linearLayoutManager);mRecyclerView.setItemAnimator(new DefaultItemAnimator());
}
private List getList() {
List list = new ArrayList<>();
List list1 = new ArrayList<>();
list.add(“塞拉斯”);
list.add(“亚托克斯”);
list.add(“锤石”);
list.add(“瑞兹”);
list.add(“洛”);
list.add(“霞”);
list.add(“李青”);
list.add(“厄加特”);
list.add(“安妮”);
list.add(“金克斯”);
list.add(“薇恩”);
list.add(“卡莉斯塔”);
list.add(“拉克丝”);for (int i =0;i<list.size();i++){list1.add((i+1)+":"+list.get(i));}return list1;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mList = getList();
view = inflater.inflate(R.layout.tab01, container, false);
//对recycleview进行配置
InitRecyclerView();return view;
}
}
基本上就是这样了
所有文件的代码就在我的码云里,有需要可以去看看
https://gitee.com/shi-bin/recycleview.git
第二次博客作业--RecycleView控件相关推荐
- C语言第二次博客作业---分支结构
C语言第二次博客作业---分支结构 一,PTA实验作业 题目1.计算分段函数 本题目要求计算下列分段函数f(x)的值 1.代码 double x, result;scanf("%lf&quo ...
- 2022北航敏捷软件工程 第二次博客作业
2022北航敏捷软件工程 第二次博客作业 项目 内容 这个作业属于哪个课程 2022年北航敏捷软件工程 这个作业的要求在哪里 个人作业-软件案例分析 我在这个课程的目标是 了解软件工程的方法论.在实践 ...
- BUAA-2023软件工程第二次博客作业
BUAA-2023软件工程第二次博客作业 项目 这个作业属于哪个课程 2023北航敏捷软件工程 这个作业的要求在哪里 个人作业-软件案例分析 我在这个课程的目标是 学习并实践软件工程开发的方法论.在把 ...
- 20162316刘诚昊 第二周博客作业
20162316刘诚昊 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 一.数字不能为被声明变量的首个字符,否则会报错. 二.在输出的引号内是可以用中文的,但 ...
- C博客作业00--我的第一篇博客
这个作业属于哪个班级 C语言–网络2011/2012 这个作业的地址 C博客作业00–我的第一篇博客 这个作业的目标 学习Makdown语法,对本专业及C语言课程有个简单了解,记录自学慕课视频的笔记. ...
- OO--第三单元规格化设计 博客作业
OO--第三单元规格化设计 博客作业 前言 第三单元,我们以JML为基础,先后完成了 PathContainer -> Graph -> RailwaySystem 这是一个递进的过程,代 ...
- 【面向对象设计与构造】第一次博客作业
[面向对象设计与构造]第一次博客作业 一.程序结构分析 1. 第一次作业 类图 由于第一次作业难度较低,实现起来也不需要很复杂的算法,因此在编写程序的时候只建立了两个类,Main类主要负责多项式的读入 ...
- OO第三次博客作业——规格
OO第三次博客作业--规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...
- 作业二:个人博客作业内容:需求分析
作业二:个人博客作业内容:需求分析 怎样与用户有效沟通获取用户的真实需求? 访谈,正式访谈系统分析员将提出一些事先准备好的具体问题:非正式访谈中,分析人员将提出一些用户可以自由回答的开放性问题,一鼓励 ...
最新文章
- 讲解ontouchstart、ontouchend、onclick区别和坑点
- Jrebel最新激活破解方式
- Android如何获得手机power_profile.xml文件
- md文件编辑器_File Cabinet Pro for Mac(菜单栏文件管理器)
- FPGA FIFO深度计算
- linux java升级版本_为嵌入式Linux设备实现更新/升级系统
- openstack创建外网_OpenStack的女性谈论外展,教育和指导
- 数据科学入门与实战:玩转pandas之一
- selenium 使用
- 《测试类职位面试360度》
- 如何在mysql命令窗口获取到程序正在执行的sql语句
- 【转】pda的广播扫码uni-app
- 1月13 PyTorch 中模型的使用,保存加载模型
- 机器学习-模型评估方法sklearn对MINST数据集实现
- Uiautomator入门(初学者用)
- 算法入门到进阶(二)——STL和基本数据结构(vector和栈)
- 图观——渲染一个简易的三维场景
- 这些前端资源,你值得拥有
- 深度学习之 imgaug (图像增强)学习笔记
- 计算机毕业设计Java教育培训机构信息管理系统(源码+系统+mysql数据库+lW文档)