1、掌握UI设计中的layout布局(约束布局)与基本控件(button、text、imageview等); 2、掌握复杂控件与adapter的使用
在使用RecyclerView时候,必须指定一个适配器Adapter和一个布局管理器LayoutManager。 我们这样思考,当我们去完成一个界面的布局时,我们要向里面传数据,怎么去传呢?全写在xml文件里显而不合适,这就是Adapter的作用。 简而言之,Adapter就是数据与ui之间的桥梁,它把数据与前端ui连接到一起,是一个展示数据的载体。 而设置布局管理器RecyclerView则是来控制Item的布局方式,横向、竖向以及瀑布流方式 例如:你想控制横向或者纵向滑动列表效果可以通过LinearLayoutManager这个类来进行控制(与GridView效果对应的是GridLayoutManager,与瀑布流对应的还StaggeredGridLayoutManager等)。也就是说RecyclerView不再拘泥于ListView的线性展示方式,它也可以实现GridView的效果等多种效果。 下面我们展示RecyclerView的基本使用方法:
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
LinearLayoutManager layoutManager = new LinearLayoutManager(this );
//设置布局管理器
recyclerView.setLayoutManager(layoutManager);
//设置为垂直布局,这也是默认的
layoutManager.setOrientation(OrientationHelper. VERTICAL);
//设置Adapter
recyclerView.setAdapter(recycleAdapter);
//设置分隔线
recyclerView.addItemDecoration( new DividerGridItemDecoration(this ));
//设置增加或删除条目的动画
recyclerView.setItemAnimator( new DefaultItemAnimator());
接下来就开始完善之前的Demo吧 首先添加RecycleView的依赖 在build.gradle(Module:app)文件中添加如下依赖:
dependencies {
implementation 'com.android.support:recyclerview-v7:30.0.0'
}
复制代码 其中v7:后面的版本号与此文件下 compileSdkVersion后所跟数字相同,如下图所示
修改原有xml文件 为了实现RecyclerView,我们将初始的xml文件修改为ConstrainLayout(约束布局)并添加RecyclerView 代码如下:
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/tab02_RecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
android:layout_margin="8dp"
android:overScrollMode="never"
android:scrollbars="none" />
将微信fragment的布局改为recycleView布局 现在需要将 RecyclerView 添加到上次的微信fragment对应的布局文件中。使用 RecyclerView 作为整个布局的唯一视图:
<?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"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<!-- <TextView-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- android:gravity="center"-->
<!-- android:text="这是微信聊天界面"-->
<!-- android:textSize="30sp"-->
<!-- android:textStyle="bold"/>-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/weixin_recycler_view"
android:layout_width="match_parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_height="wrap_content"/>
</LinearLayout>
在布局中添加了 weixinRecycleViewAdapter 微件之后,需要获取对象句柄,将其连接到布局管理器,并为要显示的数据附加适配器
创建适配器实现步骤如下:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class VerticalAdapter extends RecyclerView.Adapter<VerticalAdapter.VerticalViewHolder> {
private Context mContext;
private List<String> mList;
public VerticalAdapter(List<String> list, Context context) {
mList = list;
mContext = context;
}
@NonNull
@Override
public VerticalAdapter.VerticalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(this.mContext).inflate(R.layout.item02, parent, false);
return new VerticalViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull VerticalViewHolder holder, int position) {
holder.tvNum.setText(position + 1 + "");
holder.tvContent.setText(mList.get(position));
}
@Override
public int getItemCount() {
return mList == null ? 0 : mList.size();
}
public static class VerticalViewHolder extends RecyclerView.ViewHolder {
TextView tvNum, tvContent;
public VerticalViewHolder(View itemView) {
super(itemView);
tvNum = itemView.findViewById(R.id.item02_num);
tvContent = itemView.findViewById(R.id.item02_content);
}
}
}
实验小结 1.使用RecycleView开发必须初始化LinearLayoutManager:recyclerView.setLayoutManager(linearLayoutManager); 2.使用RecycleView时适配器要继承 RecyclerView.Adapter<RecyclerView.ViewHolder>,adapter中必须实现3个方法:
3.和ListView一样使用RecycelView嵌套在scrollView里面的时候也会存在一些问题,recycleView嵌套在scrollview里面会不能展示数据