RecyclerView本身就是一个视图,与listView的使用方法大同小异,与listView相比更加灵活,能够动态的创建元素。Google现在推荐使用Recyclerview。listView,GirdView已都不被推荐使用了
如何使用RecyclerView? 添加相关依赖implementation'androidx.recyclerview:recyclerview:1.1.0'定义布局管理器
你可以使用RecyclerView库的三种布局管理器之一,LinerLayoutManager,GridLayoutManager,StaggeredGridLayoutManager
例如:
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this); recyclerView.setLayoutManager(linearLayoutManager);定义Adapter,ViewHolder
定义Adapter,继承 RecyclerView.Adapter,一定要复写三个方法onCreateViewHolder(),onBindViewHolder(),getItemCount()。
定义ViewHolder需要继承 RecyclerView.ViewHolder
Adapter需要时会创建ViewHolder对象,创建时都会调用onCreateViewHolder()方法,
例如:
@NonNull
@Override
public CustomAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view=View.inflate(context,R.layout.simple_item,null);//R.layout.simple_item为视图项的布局
return new ViewHolder(view);
}
通过onBindViewHolder()将 ViewHolder 与数据相关联
例如:
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.tv.setText(dataname[position]);//tv为TextView,dataneme[position]为要绑定的数据
holder.iv.setImageResource(dataimage[position]);//iv为ImageView,dataImage[position]为要绑定的数据
}
SwipeRefreshLayout 下拉刷新微件
SwipeRefreshLayout的作用
灵活的向现有应用添加滑动刷新微件,检测下拉的滑动,显示一个独特的进度条,在应用里触发回调方法以实现刷新效果
如何使用SwipeRefreshLayout 添加依赖implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"将SwipeRefreshLayout微件添加到包含视图 的现有布局文件中
例如:
定义SwipeRefreshLayout.setOnRefreshListener监听刷新手势
例如:
swipeRefreshLayout.setOnRefreshListener( new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Toast toast=Toast.makeText(MainActivity.this,"欢迎来到动物世界",Toast.LENGTH_SHORT);
toast.show();
swipeRefreshLayout.setRefreshing(false);
}
});
demo
实现效果:下拉刷新时重新加载,并显示提示信息框
代码:
MainActivity.java
package com.example.test3;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private String[] names =new String[]{"Lion","Tiger","Monkey","Dog","Cat","Elephant"};
private int[] imageIds =new int[]{R.drawable.lion,R.drawable.tiger,R.drawable.monkey,R.drawable.dog,R.drawable.cat,R.drawable.elephant};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView=findViewById(R.id.rv);
SwipeRefreshLayout swipeRefreshLayout=findViewById(R.id.swiperefresh);
swipeRefreshLayout.setOnRefreshListener( new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Toast toast=Toast.makeText(MainActivity.this,"欢迎来到动物世界",Toast.LENGTH_SHORT);
toast.show();
swipeRefreshLayout.setRefreshing(false);
}
});
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
CustomAdapter myAdapter=new CustomAdapter(names,imageIds,this);
recyclerView.setAdapter(myAdapter);
}
}
CustomerAdapter.java
package com.example.test3; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; public class CustomAdapter extends RecyclerView.Adapter{ private final String[] dataname; private final int[] dataimage; private Context context; public CustomAdapter(String[] datanameset,int[] dataimageset,Context context) { this.dataname = datanameset; this.dataimage=dataimageset; this.context=context; } @NonNull @Override public CustomAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view=View.inflate(context,R.layout.simple_item,null); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { holder.tv.setText(dataname[position]);//tv为TextView,dataneme[position]为要绑定的数据 holder.iv.setImageResource(dataimage[position]);//iv为ImageView,dataImage[position]为要绑定的数据 } @Override public int getItemCount() { return dataname.length; } public class ViewHolder extends RecyclerView.ViewHolder { private TextView tv; private ImageView iv; public ViewHolder(@NonNull View itemView) { super(itemView); tv=itemView.findViewById(R.id.name); iv=itemView.findViewById(R.id.header); } } }
activity_main.xml
simple_item.xml
textview_border.xml(设置文本边框的drawable文件)



