Android开发——recyclerview
写在前面:这个博客是我学习了三次recyclerview之后才理解了结构写的,因为问同学或者看书讲的对新手都很不友好(个人见解),所以尝试一下能不能写一篇对新手比较友好的recyclerview结构解释。当然里面有很多不是非常正确的描述,仅仅用于新手理解,请勿较真。activity的xml文件(activity_mian.xml):<?xml version="1.0" encod...
写在前面:这个博客是我学习了三次recyclerview之后才理解了结构写的,因为问同学或者看书讲的对新手都很不友好(个人见解),所以尝试一下能不能写一篇对新手比较友好的recyclerview结构解释。当然里面有很多不是非常正确的描述,仅仅用于新手理解,请勿较真。
activity的xml文件(activity_mian.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
这个就是把你的activity设置成recyclerview
“item”的xml文件(item.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginLeft="30dp"
android:layout_marginTop="10dp" />
</LinearLayout>
recyclerview大家应该都知道结果是什么样子了,这个文件就是每一项(条)内容的布局
接下来是个人认为比较难理解的逻辑内容了:
一共有三个必需类(Activity,Adapter,Viewholder),和一个非必需类(Entity):
Activity类就和普通的Activity类是一样的作用。在Activity类中需要定义要显示的数据,Activity类是和recyclerview的整体布局文件相对应,用recyclerview调用setAdapter,传入显示数据即达到想要效果。
Entity类中的内容是与每一小项(条)中的内容一一对应,用于对ViewHolder中的绑定上的组件提供显示内容
Viewholder类是获取item.xml文件中的布局,把xml中的组件和java中的变量联系起来
Adapter类是将要显示的内容填入每一条,其中有三个必须实现的函数:
onCreateViewHolder:创建一个ViewHolder,来装下xml中的布局
onBindViewHolder:将组件填上显示内容
getItemCount:获取要显示的小项个数
下面是代码:
Mainactivity.java:(对应xml文件为activity_main.xml)
package com.example.learnrecyclerview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private List<Entity> mDatas;
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
mRecyclerView = (RecyclerView)findViewById(R.id.recyclerView);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this,
LinearLayoutManager.VERTICAL,false));
myAdapter = new MyAdapter(mDatas);
mRecyclerView.setAdapter(myAdapter);
}
protected void initData()
{
mDatas = new ArrayList<>();
for (int i = 'A'; i < 'Z'; i++)
{
Entity t = new Entity();
t.setS1("" + (char) i);
mDatas.add(t);
}
}
}
MyAdapter.java:(无对应xml文件,并且其中包含了一个MyHolder的内部类,内部类中的属性和item中的组件对应,可以说MyHolder的对应xml文件为item.xml)
package com.example.learnrecyclerview;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> {
private List<Entity> entityList;//要显示的数据
public MyAdapter(List<Entity> entityList) {
this.entityList = entityList;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(viewGroup.getContext(),R.layout.item, null);
MyHolder holder = new MyHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull MyHolder myHolder, int i) {
myHolder.item.setText(entityList.get(i).getS1());
}
@Override
public int getItemCount() {
return entityList.size();
}
class MyHolder extends RecyclerView.ViewHolder {
private TextView item;
public MyHolder(@NonNull View itemView) {
super(itemView);
item = itemView.findViewById(R.id.item);
}
}
}
Entity.java:(无对应xml文件,但是类的属性需要和item中的要显示内容的组件的内容一一对应)
package com.example.learnrecyclerview;
public class Entity {
private String s1;
public String getS1() {
return s1;
}
public void setS1(String s1) {
this.s1 = s1;
}
}
结果截图:
现在想想好像挺简单的,但是不知道为什么一开始总是不懂,可能有些细节没有注意到,还有就是其中几个很重要的概念Adapter和ViewHolder没有搞清楚,不知道他们两个的区别在哪里,所以就有些懵。现在终于弄懂了!记录一下。
更多推荐
所有评论(0)