Android 开发中使用 Recyclerview

人生处万类,知识最为贤。这篇文章主要讲述Android 开发中使用 Recyclerview相关的知识,希望能为你提供帮助。
Android 开发中 Recyclerview 的使用 Overview学习自:博客园 CSDN android 官方文档
Android 呈现数据的方式有很多种,使用自定义控件,使用 ListView,使用Recyclerview.
那么我们今天看一下Android 中 如是使用 Recyclerview
声明依赖性官方文档所示,我们需要声明以下依赖性:

dependencies { implementation " androidx.recyclerview:recyclerview:1.1.0" // For control over item selection of both touch and mouse driven selection implementation " androidx.recyclerview:recyclerview-selection:1.1.0-beta01" }

布局文件设置 我们先来看一下源码:
< ?xml version=" 1.0" encoding=" utf-8" ?> < androidx.drawerlayout.widget.DrawerLayout xmlns:android=" http://schemas.android.com/apk/res/android" xmlns:app=" http://schemas.android.com/apk/res-auto" xmlns:card_view=" http://schemas.android.com/apk/res-auto" xmlns:tool=" http://schemas.android.com/tools" android:id=" @+id/drawLayout" android:layout_width=" match_parent" android:layout_height=" match_parent" android:animateLayoutChanges=" true" android:orientation=" vertical" tool:context=" .MainPackage.MainActivity" > < LinearLayout android:layout_width=" match_parent" android:layout_height=" match_parent" android:orientation=" vertical" > < androidx.appcompat.widget.Toolbar android:id=" @+id/toolbarLibrary" android:layout_width=" match_parent" android:layout_height=" wrap_content" android:background=" #517EB9" android:fitsSystemWindows=" true" app:layout_scrollFlags=" scroll|enterAlways" app:popupTheme=" @style/Theme.AppCompat.Light" app:titleTextColor=" #fff" /> < AutoCompleteTextView android:id=" @+id/auto2" android:layout_width=" match_parent" android:layout_height=" wrap_content" android:layout_marginLeft=" 10dp" android:layout_marginRight=" 10dp" android:text=" MultiAutoCompleteTextView" /> < androidx.recyclerview.widget.RecyclerView android:id=" @+id/LibraryListview" class=" androidx.appcompat.app.AlertController$RecycleListView" android:layout_width=" match_parent" android:layout_height=" match_parent" android:layout_gravity=" center" android:layout_marginLeft=" 10dp" android:layout_marginRight=" 10dp" android:overScrollMode=" never" > < /androidx.recyclerview.widget.RecyclerView> < MultiAutoCompleteTextView android:id=" @+id/multiAutoCompleteTextView" android:layout_width=" match_parent" android:layout_height=" wrap_content" android:text=" MultiAutoCompleteTextView" /> < /LinearLayout> < com.google.android.material.navigation.NavigationView android:id=" @+id/navigationViewLilbary" android:layout_width=" match_parent" android:layout_height=" match_parent" android:layout_gravity=" start" app:menu=" @menu/library_items_menu" /> < /androidx.drawerlayout.widget.DrawerLayout>

这样 我们的布局文件就创建完成了。这边不做过多的解释。
活动中使用我们的Recyclerview我们已经在布局文件中创建好了我们的Recyclerview
接着我们看一下如何使用它吧。
public class LibraryMainActivity extends AppCompatActivity { NavigationView navigationView; DrawerLayout drawerLayout; TextView txtEmail; TextView txtName; ImageView UserImageView; List< String> listImage = new ArrayList< > (); Toolbar toolbar; RecyclerView recyclerView; LinearLayoutManager linearLayoutManager; List< String> list = new ArrayList< > (); List< String> SearchNameList = new ArrayList< > (); AutoCompleteTextView SearchAuto; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_library_main); //region -实例化基础控件等- drawerLayout = findViewById(R.id.drawLayout); navigationView = findViewById(R.id.navigationViewLilbary); txtEmail = findViewById(R.id.txtEmail); txtName = findViewById(R.id.txtName); toolbar = findViewById(R.id.toolbarLibrary); toolbar.setTitle(" 欢迎使用图书馆" ); toolbar.setLogo(R.drawable.ic_action_name); this.setSupportActionBar(toolbar); // endregion //region -基础设置- toolbar.setOnClickListener(v -> { drawerLayout.openDrawer(navigationView); }); GetUserInformation(); //设置 沉浸式体验 if (Build.VERSION.SDK_INT > = Build.VERSION_CODES.LOLLIPOP) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); } //endregion linearLayoutManager = new LinearLayoutManager(this); recyclerView = findViewById(R.id.LibraryListview); StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(layoutManager); recyclerView.setItemAnimator(new DefaultItemAnimator()); int a = 100; for (int i = 0; i < a; i++) { list.add(" 第一行代码 - 郭霖 (第二版)" + String.valueOf(i)); SearchNameList.add(" 第一行代码 - 郭霖 (第二版)" + String.valueOf(i)); } recyclerView.setAdapter(new RecyclerViewAdapter(LibraryMainActivity.this, list)); SearchAuto = findViewById(R.id.auto2); SearchAuto.setAdapter(new ArrayAdapter< > (LibraryMainActivity.this, android.R.layout.simple_spinner_dropdown_item, SearchNameList)); }/** *@ClassName:LibraryMainActivity - 用于获取 当前登录用户的个人信息,头像等。 *@author:CaoJiaHao *@Param: **/ void GetUserInformation() { new Thread(new Runnable() { @Override public void run() { String ImageString = Global.HttpGet(" UserInformations/" + SessionClass.userClass.get(0).getUserId(), null); listImage = UserImageJSON.modelJson(ImageString); String imageString = listImage.get(0); final Bitmap Userbitmap = Global.StringToBitmap(imageString); runOnUiThread(new Runnable() { @Override public void run() { View viewHearder = navigationView.inflateHeaderView(R.layout.nav_header); txtName = viewHearder.findViewById(R.id.txtName); txtEmail = viewHearder.findViewById(R.id.txtEmail); UserImageView = viewHearder.findViewById(R.id.UserImageView); txtName.setText(" User Name: " + SessionClass.userClass.get(0).getUserName()); txtEmail.setText(" Email: " + SessionClass.userClass.get(0).getEmail()); UserImageView.setImageBitmap(Userbitmap); //处理当前登录这没有头像的情况 if (Userbitmap == null || Userbitmap.isRecycled()) UserImageView.setImageResource(R.drawable.user_image); } }); } }).start(); } }

这样我们在活动中使用使用我们的Recyclerview就完成了。
当时我们可以看到,在程序中我们使用到了适配器。
接下来我们就看一下适配器是如何编写的。
android Recyclerview 的适配器如果之前学过Recyclerview的人可能知道。在Recyclerview中并没有给你封装好的单击事件和长按事件等。那么这就意味着。我们需要自己写。
【Android 开发中使用 Recyclerview】我们先看一下我们的适配器源码:
public class RecyclerViewAdapter extends RecyclerView.Adapter< RecyclerView.ViewHolder> { private Context mContext; private List< String> mList = new ArrayList< > (); TextView textView; ImageView booksImage; public RecyclerViewAdapter(Context mContext, List< String> mList) { this.mContext = mContext; this.mList = mList; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.r_view_items, parent, false); textView = view.findViewById(R.id.text_view); booksImage = view.findViewById(R.id.booksImageView); return new ViewHodel(view); } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { textView.setText(mList.get(position)); holder.itemView.setOnClickListener(v -> { Toast.makeText(mContext, " Hello android" , Toast.LENGTH_SHORT).show(); }); holder.itemView.setOnLongClickListener(v -> { View viewInformation = LayoutInflater.from(mContext).inflate(R.layout.book_information, null, false); ImageView imageView = viewInformation.findViewById(R.id.booksInformationImageView); TextView txtName = viewInformation.findViewById(R.id.txtBookName); txtName.setText(textView.getText()); Bitmap bitmap = ((BitmapDrawable) booksImage.getDrawable()).getBitmap(); imageView.setImageBitmap(bitmap); AlertDialog dialog = new AlertDialog.Builder(mContext).setView(viewInformation).show(); return true; }); } @Override public int getItemCount() { return mList.size(); } } class ViewHodel extends RecyclerView.ViewHolder { private TextView txtName; public ViewHodel(@NonNull View itemView) { super(itemView); txtName = itemView.findViewById(R.id.text_view); } }

然后我们根据源码来看一下:
  1. 我们创建一个RecyclerviewAdapter并且继承于RecyclerView.Adapter< RecyclerView.ViewHolder>
  2. 然后我们创建一个集合,调用活动的Context
  3. 然后我们创建了我们的构造函数。
  4. 如果我么正确的继承了我们的对应函数,我们需要重写 我们的 onCreateViewHolder方法。
  5. 这边我们需要加载我们的自定义Items布局。
  6. 然后这边我直接将我们的控件初始换完成了。当时我不知道对不对。
  7. 接着就是我们的onBindViewHolder方法了。这边我注册了部分的点击事件。
  8. 最后是我们的getItemCount(); 的方法了。他的主要用途返回我们的items数量。
    这样我觉得我已经完成了。
看一下效果:
Android 开发中使用 Recyclerview

文章图片

这篇可能不太对因为个人工作问题,在开发中不会去使用任何依赖。所以这篇只是拓展视野而已。??

    推荐阅读