基本用法
- 和
ListView
控件类似,需要item布局,需要填充到 Item
中的数据,以及用来将数据填充到布局中的适配器Adapter
1. 在需要放置RecyclerView控件的布局中放置控件,然后创建一个Item布局
放置RecyclerView控件
<?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">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/main_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
列表项的布局
<?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="wrap_content">
<ImageView
android:id="@+id/list_item_Imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/list_item_Textview_explain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/list_item_Imageview"
android:maxLines="1" />
<TextView
android:id="@+id/list_item_Textview_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/list_item_Textview_explain"
android:layout_toRightOf="@id/list_item_Imageview"
android:maxLines="1" />
</RelativeLayout>
2. 构建一个实类用来保存读取
数据
public class Emoji {
private int imageid;
private String explain;
private String price;
public Emoji(int imageid, String explain, String price) {
this.imageid = imageid;
this.explain = explain;
this.price = price;
}
public String getExplain() {
return explain;
}
public int getImageid() {
return imageid;
}
public String getPrice() {
return price;
}
}
3.构建一个继承自RecyclerView.Adapter
的EmojiAdapter
import android.view.LayoutInflater;
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;
import java.util.List;
public class EmojiAdapter extends RecyclerView.Adapter<EmojiAdapter.ViewHolder> {
private List<Emoji> EmojiList;
static class ViewHolder extends RecyclerView.ViewHolder {
ImageView Emoji_imageView;
TextView textView_explain;
TextView textView_price;
public ViewHolder(@NonNull View itemView) {
super(itemView);
Emoji_imageView = itemView.findViewById(R.id.list_item_Imageview);
textView_explain = itemView.findViewById(R.id.list_item_Textview_explain);
textView_price = itemView.findViewById(R.id.list_item_Textview_price);
}
}
public EmojiAdapter(List<Emoji> emojiList) {
EmojiList = emojiList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
final ViewHolder viewHolder = new ViewHolder(view);
viewHolder.Emoji_imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = viewHolder.getAdapterPosition();
Emoji emoji = EmojiList.get(position);
Toast.makeText(v.getContext(), "点击了图片: " + emoji.getImageid(), Toast.LENGTH_SHORT).show();
}
});
viewHolder.textView_explain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = viewHolder.getAdapterPosition();
Emoji emoji = EmojiList.get(position);
Toast.makeText(v.getContext(), "点击了描述: " + emoji.getExplain(), Toast.LENGTH_SHORT).show();
}
});
viewHolder.textView_price.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = viewHolder.getAdapterPosition();
Emoji emoji = EmojiList.get(position);
Toast.makeText(v.getContext(), "点击了价格: " + emoji.getPrice(), Toast.LENGTH_SHORT).show();
}
});
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Emoji emoji = EmojiList.get(position);
holder.Emoji_imageView.setImageResource(emoji.getImageid());
holder.textView_explain.setText(emoji.getExplain());
holder.textView_price.setText(emoji.getPrice());
holder.textView_price.setTextColor(0xFFFF0000);
}
@Override
public int getItemCount() {
return EmojiList.size();
}
}
4.将数据初始化并填充到对应的RecyclerView控件中
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<Emoji> EmojiList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initresource();
RecyclerView recyclerView = findViewById(R.id.main_recyclerview);
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
EmojiAdapter adapter = new EmojiAdapter(EmojiList);
recyclerView.setAdapter(adapter);
}
private void initresource() {
String sym = "¥ 100";
for (int i = 0; i < 5; i++) {
Emoji xhs_theme_xy_emo_buman = new Emoji(R.drawable.xhs_theme_xy_emo_buman, "描述说明, \"描述说明\", sym", sym);
EmojiList.add(xhs_theme_xy_emo_buman);
Emoji xhs_theme_xy_emo_deyi = new Emoji(R.drawable.xhs_theme_xy_emo_deyi, "xhs_theme_xy_emo_deyi", sym);
EmojiList.add(xhs_theme_xy_emo_deyi);
Emoji xhs_theme_xy_emo_fanu = new Emoji(R.drawable.xhs_theme_xy_emo_fanu, "描述说明描述说明描述说明描述说明", sym);
EmojiList.add(xhs_theme_xy_emo_fanu);
Emoji xhs_theme_xy_emo_fuhei = new Emoji(R.drawable.xhs_theme_xy_emo_fuhei, "1111111111155555555555", sym);
EmojiList.add(xhs_theme_xy_emo_fuhei);
Emoji xhs_theme_xy_emo_haipa = new Emoji(R.drawable.xhs_theme_xy_emo_haipa, "描述说明", sym);
EmojiList.add(xhs_theme_xy_emo_haipa);
Emoji xhs_theme_xy_emo_huoli = new Emoji(R.drawable.xhs_theme_xy_emo_huoli, "描述说明", sym);
EmojiList.add(xhs_theme_xy_emo_huoli);
Emoji xhs_theme_xy_emo_keshui = new Emoji(R.drawable.xhs_theme_xy_emo_keshui, "描述说明", sym);
EmojiList.add(xhs_theme_xy_emo_keshui);
Emoji xhs_theme_xy_emo_koubi = new Emoji(R.drawable.xhs_theme_xy_emo_koubi, "描述说明", sym);
EmojiList.add(xhs_theme_xy_emo_koubi);
Emoji xhs_theme_xy_emo_kuku = new Emoji(R.drawable.xhs_theme_xy_emo_kuku, "描述说明", sym);
EmojiList.add(xhs_theme_xy_emo_kuku);
Emoji xhs_theme_xy_emo_shaonv = new Emoji(R.drawable.xhs_theme_xy_emo_shaonv, "描述说明", sym);
EmojiList.add(xhs_theme_xy_emo_shaonv);
Emoji xhs_theme_xy_emo_shengqi = new Emoji(R.drawable.xhs_theme_xy_emo_shengqi, "描述说明", sym);
EmojiList.add(xhs_theme_xy_emo_shengqi);
Emoji xhs_theme_xy_emo_shihua = new Emoji(R.drawable.xhs_theme_xy_emo_shihua, "xhs_theme_xy_emo_shihua", sym);
EmojiList.add(xhs_theme_xy_emo_shihua);
}
}
}