Android使用RecyclerView实现列表功能
程序员文章站
2022-06-08 19:01:54
...
在Android中,列表是使用最多最广的功能之一,而RecyclerView是Android中最灵活的列表控件之一,在企业开发中广泛运用,本章我们使用RecyclerView实现如下图的列表功能。
一.与ListView类似,RecyclerView需要有容纳其布局的layout,以及展示layout的activity
1.activity_linear_recycler_view.xml代码如下,在xml中我们使用RelativeLayout来容纳RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rv_main"
android:background="#1234"/>
</RelativeLayout>
2.LinearRecyclerViewActivity.java代码如下,用于展示RecyclerView,其中我们为RecyclerView设置Adapter:LinearAdapter
package com.example.fitz.demo4.recycleView;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.example.fitz.demo4.R;
public class LinearRecyclerViewActivity extends AppCompatActivity {
private RecyclerView mRvMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linear_recycler_view);
mRvMain=(RecyclerView) findViewById(R.id.rv_main);
mRvMain.setLayoutManager(new LinearLayoutManager(LinearRecyclerViewActivity.this));
mRvMain.setAdapter(new LinearAdapter(LinearRecyclerViewActivity.this));
}
}
二.实现适配器-LinearAdapter
package com.example.fitz.demo4.recycleView;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.example.fitz.demo4.R;
import java.util.ArrayList;
import java.util.List;
public class LinearAdapter extends RecyclerView.Adapter <LinearAdapter.LinearViewHolder>{
//context
private Context mContext;
//展示的数据
private List<String> list=new ArrayList<>();
public LinearAdapter(Context context){
this.mContext=context;
for(int i=0;i<30;i++){
list.add(String.format("%s-%s", i/10+1,i));
}
}
//onCreateViewHolder方法创建一个viewHolder,viewholder可以理解为一条数据的展示布局,这里我们自定义类LinearViewHolder创建一个只有TextView的item
//这里我们需要创建每条布局使用的layout:layout_linear_item
@Override
public LinearAdapter.LinearViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new LinearViewHolder(LayoutInflater.from(mContext).inflate(R.layout.layout_linear_item,parent,false));
}
//onBindViewHolder方法为item的UI绑定展示数据,
@Override
public void onBindViewHolder(LinearAdapter.LinearViewHolder holder, int position) {
holder.textView.setText(String.format("Hello World %s", list.get(position)));
}
//item的总长度
@Override
public int getItemCount() {
return 30;
}
//LinearViewHolder可以看作一个item的展示和内部逻辑处理,故而如果需要绑定事件,获取控件的时候要在itemView中获取
//itemView由onCreateViewHolder方法LayoutInflater.inflatec创建
class LinearViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
public LinearViewHolder(View itemView){
super(itemView);
textView=(TextView) itemView.findViewById(R.id.tv_main);
//简单事件处理
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext,textView.getText().toString(),Toast.LENGTH_SHORT).show();
}
});
}
}
}
2.layout_linear_item的实现:
<?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="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_main"
android:textSize="20sp"
android:padding="12px"
android:text="hello world"/>
</LinearLayout>
三:需要注意的一点,你需要在build.gradle中添加recyclerView依赖:
compile 'com.android.support:design:26.1.0',后面的版本号与所创建的Android应用一致,可展开External Libraries查看
下一篇: 嗓子疼喝什么好得快呢