RecyclerView
- 权限
implementation 'com.android.support:recyclerview-v7:28.0.0'
- 首先RecyclerView非常的方便简单适用,实用性很强,用于实现某些特定的布局,意义很重大.
- 这里第一篇先简单的告诉大家如何快速使用其中的行向与网格布局.还有第三种瀑布流稍后会补齐.
- 先添加权限
- 设置适配器就完成了RecyclerView的简单使用.
先从Activity中填写,要知道其可以实现三种方式的布局,这里先简单的讲一下前面两种简单的行向与网格布局.
代码中的行向布局已被我注释掉,
显示的是网格布局…
public class MainActivity extends AppCompatActivity {
//适配器及组件
RecycleAdapter adapter;
private RecyclerView recycle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//组件
recycle = (RecyclerView) findViewById(R.id.recycle);
//初始化适配器
adapter = new RecycleAdapter(this);
//调用适配器中的addItem方法填入数据
for (int i = 0; i < 60; i++) {
adapter.addItem("北京的第"+i+"天");
}
/**
* 行向布局
*/
//设置管理
//LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
// recycle.setLayoutManager(linearLayoutManager);
/**
* 纵向布局
* 第二个参数为列数
* 一行为三列
*/
GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3);
//设置管理
recycle.setLayoutManager(gridLayoutManager);
//设置适配器
recycle.setAdapter(adapter);
}
}
这里就介绍适配器
以下是注意点:
1.一定要继承android.support.v7.widget.RecyclerView下的Adapter
2.<> 这里面的是自定义的适配器类名.自定义的ViewHolder名,可根据个人的喜好定义
3.<>这里面是泛型,
4.写完根据爆红,添加相应的方法.会出来三个方法,依次为onCreateViewHolder,onBindViewHolder,getItemCount,注释中有详解.不再过多点缀…
public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.MyHolder> {
//前面传递过来的上下文
Context context;
List<String> list = new ArrayList<>();
//构造
public RecycleAdapter(Context context ) {
this.context = context;
}
/**
* 这个方法是用来创建viewHolder的
* 就是引用xml传送的viewHolder的
*
* */
@NonNull
@Override
public RecycleAdapter.MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
//加载返回
View view = LayoutInflater.from(context).inflate(R.layout.item_list,viewGroup,false);
MyHolder myHolder = new MyHolder(view);
return myHolder;
}
/**
* 第一个参数: 自定义ViewHolder
* 第二个参数: i 寻找位置
* 这个方法里面就是用来设置
* */
@Override
public void onBindViewHolder(@NonNull RecycleAdapter.MyHolder myHolder, final int i) {
//设置TextView
String s = list.get(i);
myHolder. tv.setText(s);
//点击条目
myHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "点击了第"+i+"条", Toast.LENGTH_SHORT).show();
}
});
//点击组件
myHolder.tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "点击了"+list.get(i), Toast.LENGTH_SHORT).show();
}
});
}
/**
*
* 获取list长度
* */
@Override
public int getItemCount() {
return list.size();
}
//MainActivity中的添加list集合的方法(按照个人习惯走,你也可以在Activity中添加足够的list)
//Activity中添加list之后,,传递参数时为上下文和list集合
//这个在继承适配器后是没有的.....
public void addItem(String s){
list.add(s);
}
/**
* 这个是自定义的ViewHolder继承的 RecyclerView.ViewHolder
*用来寻找组件
* */
class MyHolder extends RecyclerView.ViewHolder{
TextView tv ;
public MyHolder(@NonNull View itemView) {
super(itemView);
//添加组件就好
tv = itemView.findViewById(R.id.list_textView);
}
}
}
布局文件
MainActivity中
<android.support.v7.widget.RecyclerView
android:id="@+id/recycle"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
list_textView 布局
<TextView
android:id="@+id/list_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#f4a"
android:textSize="20dp"
android:text="测试数据"/>
效果一
网格
效果二
行向