- 继承
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ androidx.recyclerview.widget.RecyclerView - implementation “androidx.recyclerview:recyclerview:1.2.1”
public class MainActivity extends AppCompatActivity {
private RecyclerView rv;
private AnimalAdapter adapter;
private ArrayList<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
initClick();
}
private void initView() {
rv = findViewById(R.id.rv);
}
private void initData() {
list = new ArrayList<>();
list.add("mouse");
list.add("cattle");
list.add("tiger");
list.add("rabbit");
list.add("dragon");
list.add("snake");
list.add("horse");
list.add("sheep");
list.add("monkey");
list.add("chicken");
list.add("dog");
list.add("pig");
adapter = new AnimalAdapter(this, list);
LinearLayoutManager layoutManager=new LinearLayoutManager(this,RecyclerView.VERTICAL,false);
rv.setLayoutManager(layoutManager);
rv.setAdapter(adapter);
}
private void initClick() {
adapter.setOnItemClickListener(new AnimalAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
Toast.makeText(MainActivity.this, list.get(position), Toast.LENGTH_LONG).show();
}
});
}
}
<?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"
android:orientation="vertical"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
public class AnimalAdapter extends RecyclerView.Adapter<AnimalAdapter.ViewHolder> {
private Context mContext;
private ArrayList<String> list;
private OnItemClickListener listener;
private int selectIndex = 0;
public AnimalAdapter(Context mContext, ArrayList<String> list) {
this.mContext = mContext;
this.list = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = View.inflate(mContext, R.layout.adapter_animal, null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (null != list) {
if (!TextUtils.isEmpty(list.get(position)))
holder.content.setText(list.get(position));
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != listener) {
listener.onItemClick(holder.getBindingAdapterPosition());
}
}
});
if (selectIndex == position) {
holder.itemView.setBackgroundColor(Color.RED);
} else {
holder.itemView.setBackgroundColor(Color.WHITE);
}
}
@Override
public int getItemCount() {
return list.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView icon;
TextView content;
public ViewHolder(@NonNull View itemView) {
super(itemView);
icon = itemView.findViewById(R.id.iv_Icon);
content = itemView.findViewById(R.id.tv_content);
}
}
public interface OnItemClickListener {
void onItemClick(int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
public void updateSelectItem(int selectIndex) {
this.selectIndex = selectIndex;
}
}
<?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="match_parent"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_Icon"
android:layout_width="200dp"
android:layout_height="200dp"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="测试"
android:textSize="30sp" />
</LinearLayout>
</LinearLayout>