目录
一、RecyclerView基本概念
RecyclerView是Android 5.0推出的,是support-v7包中的新组件,它被用来代替ListView和GridView,并且能够实现瀑布流的布局,更加高级并且更加灵活,提供更为高效的回收复用机制,同时实现管理与视图的解耦合。
我们今天要做的是在原有的类微信界面上选择一个tab添加RecyclerView设计实现纵向布局浏览界面。
(类微信界面的设计可以参考上一篇文章: https://blog.csdn.net/qq_43915340/article/details/109084221.)
这只是完成最简单最基本的RecyclerView的功能,还有很多功能比如滑动删除、顶部悬浮、上拉加载、下拉刷新等,具体可以参靠官方的指南: https://developer.android.google.cn/guide/topics/ui/layout/recyclerview.html.
二、前端页面设计
item_dome.xml
<?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="50dp"
xmlns:tools="http://schemas.android.com/tools"
android:layout_margin="8dp"
android:background="@drawable/common_bg"
android:orientation="vertical">
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
tools:text="内容" />
</LinearLayout>
tab01.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/verticalview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:overScrollMode="never"
android:scrollbars="none"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
三、后端代码
VerticalAdapter.java
RecyclerView的布局需要对应的一个适配器的java文件,我想实现的是纵向布局所以需要对应的一个纵向布局的java文件
package com.example.mywechat;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class VerticalAdappter extends RecyclerView.Adapter<VerticalAdappter.verticalviewholder> {
private List<String>list;
private Context context;
public VerticalAdappter(Context context, List<String> list) {
this.context=context;
this.list=list;
}
@Override
public verticalviewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(context).inflate(R.layout.item_dome,parent,false);
return new verticalviewholder(view);
}
@Override
public void onBindViewHolder(verticalviewholder holder, int position) {
holder.tvContent.setText(list.get(position));
}
@Override
public int getItemCount() {return list.size();}
public class verticalviewholder extends RecyclerView.ViewHolder{
TextView tvContent;
public verticalviewholder(View itemView) {
super(itemView);
tvContent = itemView.findViewById(R.id.content);
}
}
}
weixinfragment.java
package com.example.mywechat;
import android.content.Context;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class weixinFragment extends Fragment {
private RecyclerView recyclerView;
private List<String> mList = new ArrayList<>();
private Context context;
private VerticalAdappter adapter;
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private String mParam1;
private String mParam2;
public weixinFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment weixinFragment.
*/
// 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);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view=inflater.inflate(R.layout.tab01, container, false);
recyclerView=view.findViewById(R.id.verticalview);
initData();
initView();
return view;
}
private void initData() {
mList.add("詹姆斯");
mList.add("戴维斯");
mList.add("格林");
mList.add("波普");
mList.add("霍华德");
mList.add("库兹玛");
mList.add("卡鲁索");
mList.add("jr史密斯");
mList.add("库克");
mList.add("隆多");
mList.add("莫里斯");
mList.add("麦基");
mList.add("杜德利");
mList.add("阿德托昆博");
mList.add("维特斯");
mList.add("布拉德利");
}
private void initView() {
context=this.getActivity();
adapter=new VerticalAdappter(context,mList);
LinearLayoutManager manager=new LinearLayoutManager(context);
manager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(manager);
recyclerView.setHasFixedSize(true);
}
}
我这里只列出了在类微信界面设计好的基础上需要添加修改的代码,其他的没有变动和之前的类微信界面是一样的
四、运行界面展示
最后附上源码的代码仓库地址(码云)
链接: https://gitee.com/yuiaikn/android.git.