废话不多说上代码
<?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.RecyclerViewandroid:id="@+id/recyclerView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" /><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerView2"android:layout_width="match_parent"android:layout_height="wrap_content" />
</LinearLayout>
对应Activity
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.os.Bundle;
import android.util.Log;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private RecyclerView recyclerView1;private RecyclerView recyclerView2;private List<MenuData> dataList;MenuAdapter adapter;ListAdapter listAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);recyclerView1 = findViewById(R.id.recyclerView1);recyclerView2 = findViewById(R.id.recyclerView2);LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);recyclerView1.setLayoutManager(layoutManager);// 创建模拟数据createMockData();adapter = new MenuAdapter(dataList, selectedData -> {Log.d("菜单选择", selectedData.getName());});recyclerView1.setAdapter(adapter);LinearLayoutManager layoutManager2 = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);recyclerView2.setLayoutManager(layoutManager2);listAdapter = new ListAdapter(dataList, selectedData -> {Log.d("列表选择", selectedData.getName());});recyclerView2.setAdapter(listAdapter);}private void createMockData() {dataList = new ArrayList<>();for (int i = 1; i <= 10; i++) {MenuData data = new MenuData("Item " + i, i); // 假设 MenuData 类有一个带有字符串和整型参数的构造函数dataList.add(data); // 将新创建的 MenuData 对象添加到 dataList 中}}
}
MenuData.实体类
public class MenuData {private String name;private int id;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public MenuData(String name, int id) {this.name = name;this.id = id;}
}
对应适配器menuAdapter,主要实现菜单选择
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import java.util.List;public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.ViewHolder> {private List<MenuData> dataList;private int selectedPosition = -1;private OnItemSelectedListener listener;public MenuAdapter(List<MenuData> dataList, OnItemSelectedListener listener) {this.dataList = dataList;this.listener = listener;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {// 创建 ViewHolderView view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);return new ViewHolder(view);}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {// 绑定数据到 ViewHolderMenuData data = dataList.get(position);holder.bindData(data);holder.itemView.setOnClickListener(v -> {if (listener != null) {selectedPosition = position;notifyDataSetChanged(); // 刷新列表以更新选中项的样式listener.onItemSelected(dataList.get(position));}});// 设置选中项的样式if (position == selectedPosition) {holder.textView.setTextColor(Color.BLUE);} else {holder.textView.setTextColor(Color.BLACK);}}@Overridepublic int getItemCount() {// 返回数据列表的大小return dataList.size();}public class ViewHolder extends RecyclerView.ViewHolder {private TextView textView;public ViewHolder(@NonNull View itemView) {super(itemView);textView = itemView.findViewById(R.id.textView);}public void bindData(MenuData data) {// 绑定数据到视图textView.setText(data.getName());}}public interface OnItemSelectedListener {void onItemSelected(MenuData selectedData);}
}
item_layout.xml
<!-- item_layout.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:padding="8dp"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:textColor="@android:color/black"/></LinearLayout>
接下来就是 ListAdapter适配器,这个主要实现向下列表得
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import java.util.List;public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ListViewHolder> {private List<MenuData> dataList;private OnItemSelectedListener listener;private MenuData selectedData;public ListAdapter(List<MenuData> dataList, OnItemSelectedListener listener) {this.dataList = dataList;this.listener = listener;}@NonNull@Overridepublic ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false);return new ListViewHolder(view);}@Overridepublic void onBindViewHolder(@NonNull ListViewHolder holder, int position) {MenuData data = dataList.get(position);holder.bind(data, listener, data == selectedData);}@Overridepublic int getItemCount() {return dataList.size();}public void updateSelectedData(MenuData selectedData) {this.selectedData = selectedData;notifyDataSetChanged();}public static class ListViewHolder extends RecyclerView.ViewHolder {private TextView textView;public ListViewHolder(@NonNull View itemView) {super(itemView);textView = itemView.findViewById(R.id.textView);}public void bind(MenuData data, OnItemSelectedListener listener, boolean isSelected) {textView.setText(data.getName());itemView.setBackgroundColor(isSelected ? Color.LTGRAY : Color.WHITE);itemView.setOnClickListener(v -> {if (listener != null) {listener.onItemSelected(data);}});}}public interface OnItemSelectedListener {void onItemSelected(MenuData selectedData);}
}
对应item_list.xml
<!-- item_layout.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:padding="8dp"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:textColor="@android:color/black"/></LinearLayout>
最后效果图