Recycle绑定adapter
private FragmentMultiMediaBinding binding; private List<MediaItem> mediaItemList; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentMultiMediaBinding.inflate(inflater, container, false); initData(); binding.mediaList.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false)); binding.mediaList.setAdapter(new MediaListAdapter(mediaItemList)); View root = binding.getRoot(); return root; } private void initData() { mediaItemList = new ArrayList<>(); mediaItemList.add(new MediaItem(R.drawable.selector_radio, R.string.radio)); mediaItemList.add(new MediaItem(R.drawable.selector_bt, R.string.bt)); mediaItemList.add(new MediaItem(R.drawable.selector_udisk, R.string.udisk)); }
Adapter代码
public class MediaListAdapter extends RecyclerView.Adapter<MediaListAdapter.MyHolder> { private List<MediaItem> mList;//数据源 public int mSelectedId = 0; public MediaListAdapter(List<MediaItem> list) { mList = list; } //创建ViewHolder并返回,后续item布局里控件都是从ViewHolder中取出 @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.multimedia_type_item, parent, false); return new MyHolder(view); } //将数据绑定到ViewHolder中 @Override public void onBindViewHolder(MyHolder holder, int position) { holder.textView.setText(mList.get(position).getText_id()); holder.imageView.setImageResource(mList.get(position).getImage_id()); // 设置选中状态效果 holder.itemView.setSelected(position == mSelectedId); holder.itemView.setOnClickListener(v -> { int temp = mSelectedId; mSelectedId = holder.getAdapterPosition(); notifyItemChanged(temp); notifyItemChanged(mSelectedId); }); } //获取数据源总的条数 @Override public int getItemCount() { return mList.size(); } //自定义内部类ViewHolder,绑定控件 static class MyHolder extends RecyclerView.ViewHolder { TextView textView; ImageView imageView; public MyHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.media_txt); imageView = itemView.findViewById(R.id.media_img); } } }
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="90dp" android:background="@color/selector_multimedia_item_bg" android:gravity="center_vertical" android:orientation="horizontal"> <ImageView android:id="@+id/media_img" android:layout_width="60dp" android:layout_height="60dp" android:layout_marginStart="25dp" android:duplicateParentState="true"/> <TextView android:id="@+id/media_txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:duplicateParentState="true" 保持父控件的选中状态 android:textColor="@color/white" android:textSize="28sp" android:textStyle="bold"/> </LinearLayout>