• Android:ListView在Fragment中的使用


    一、前言:

    因为工作一直在用mvvm框架,因此这篇文章是基于mvvm框架写的。在Fragment复制之前一定要谨记项目可以跑起来。确保能跑起来之后直接复制就行。

    二、代码展示:

    页面布局

    1. ?xml version="1.0" encoding="utf-8"?>
    2. <layout xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:tools="http://schemas.android.com/tools">
    4. <data>
    5. <variable
    6. name="viewModel"
    7. type="com.example.simplenotebook.ui.functionpage.regist.RegistViewModel" />
    8. data>
    9. <FrameLayout
    10. android:layout_width="match_parent"
    11. android:layout_height="match_parent"
    12. tools:context=".ui.functionpage.regist.RegistFragment">
    13. <ListView
    14. android:id="@+id/lv"
    15. android:layout_width="match_parent"
    16. android:layout_height="match_parent" />
    17. FrameLayout>
    18. layout>

    item的页面布局:

    1. "1.0" encoding="utf-8"?>
    2. <layout xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:app="http://schemas.android.com/apk/res-auto"
    4. xmlns:tools="http://schemas.android.com/tools">
    5. <androidx.constraintlayout.widget.ConstraintLayout
    6. android:layout_width="match_parent"
    7. android:layout_height="wrap_content">
    8. <androidx.constraintlayout.widget.ConstraintLayout
    9. android:layout_width="match_parent"
    10. android:layout_height="wrap_content"
    11. android:layout_marginLeft="20dp"
    12. android:layout_marginTop="10dp"
    13. android:layout_marginRight="20dp"
    14. android:background="@color/white"
    15. app:layout_constraintEnd_toEndOf="parent"
    16. app:layout_constraintStart_toStartOf="parent"
    17. app:layout_constraintTop_toTopOf="parent"
    18. app:roundPercent="0.2">
    19. <TextView
    20. android:id="@+id/tv"
    21. android:layout_width="match_parent"
    22. android:layout_height="match_parent"
    23. android:layout_marginLeft="15dp"
    24. android:gravity="center_vertical"
    25. android:textColor="#3D3D3D"
    26. android:textSize="14sp" />
    27. androidx.constraintlayout.widget.ConstraintLayout>
    28. androidx.constraintlayout.widget.ConstraintLayout>
    29. layout>

    在java代码中的使用:

    新建一个UserBean.java

    1. public class UserBean {
    2. private String name;
    3. public String getName() {
    4. return name;
    5. }
    6. public void setName(String name) {
    7. this.name = name;
    8. }
    9. }
    1. public class RegistFragment extends Fragment {
    2. private RegistViewModel viewModel;
    3. private FragmentRegistBinding binding;
    4. private ListView myListView;
    5. @Override
    6. public void onStart() {
    7. super.onStart();
    8. }
    9. @Override
    10. public void onCreate(@Nullable Bundle savedInstanceState) {
    11. super.onCreate(savedInstanceState);
    12. viewModel = new ViewModelProvider(this).get(RegistViewModel.class);
    13. }
    14. @Nullable
    15. @Override
    16. public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    17. if (binding == null) {
    18. binding = FragmentRegistBinding.inflate(inflater,container,false);
    19. binding.setViewModel(viewModel);//一定要在xml的中申明好才可以setViewModel
    20. binding.setLifecycleOwner(this);
    21. myListView = binding.lv;
    22. myListView.setAdapter(new myAdapter(viewModel.userList,getContext()));
    23. myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    24. @Override
    25. public void onItemClick(AdapterView adapterView, View view, int i, long l) {
    26. Log.d("TAG", "onItemClick: "+i);
    27. }
    28. });
    29. }
    30. View rootView = binding.getRoot();
    31. return rootView;
    32. }
    33. /**
    34. * 给ListView设置适配器
    35. */
    36. public class myAdapter extends BaseAdapter{
    37. private List list;
    38. private Context context;//下面把数据显示到平台上会有用到这个参数
    39. public myAdapter(List list, Context context) {//创建构造方法
    40. this.list = list;
    41. this.context = context;
    42. }
    43. @Override
    44. public int getCount() {//listView能够显示多少数据,,一般是list有多少数据就会显示多少数据
    45. return list.size();
    46. }
    47. @Override
    48. public Object getItem(int i) {
    49. return null;
    50. }
    51. @Override
    52. public long getItemId(int i) {
    53. return i;
    54. }
    55. @Override
    56. public View getView(int i, View view, ViewGroup viewGroup) {//把数据显示到界面上
    57. //1.拿到布局文件,为了方式view不停创建我们需要做一个判断,当view为空的时候再去创建
    58. ViewHoder viewHoder;
    59. if (view == null) {
    60. //每次都要去找这个控件比较耗时,如何解决呢?我们需要创建一个viewHoder
    61. viewHoder = new ViewHoder();
    62. view = LayoutInflater.from(context).inflate(R.layout.item_home,viewGroup,false);
    63. viewHoder.textView = view.findViewById(R.id.tv);
    64. view.setTag(viewHoder);
    65. }else {
    66. viewHoder = (ViewHoder) view.getTag();
    67. }
    68. //2.拿到textView,把值传给textView
    69. // TextView textView = view.findViewById(R.id.tv);
    70. viewHoder.textView.setText(list.get(i).getName());
    71. Log.i("TAG", "getView: "+i);
    72. //3.把view返回出去
    73. return view;
    74. }
    75. }
    76. private final class ViewHoder{
    77. TextView textView;
    78. }
    79. }

    Fragmennt对应的view Model

    1. public class RegistViewModel extends ViewModel {
    2. public List userList = new ArrayList<>();
    3. public void setData(){
    4. for (int i = 0; i < 100; i++) {
    5. UserBean ub = new UserBean();
    6. ub.setName("流沔"+i);
    7. userList.add(ub);
    8. }
    9. }
    10. }

    三、效果展示:

  • 相关阅读:
    Linux命令(107)之basename
    ClickHouse 对付单表上亿条记录分组查询秒出, OLAP应用秒杀其他数据库
    HIT 模式识别 手写汉字分类 Python实现
    2022年N1叉车司机考试模拟100题及在线模拟考试
    查看ThinkPad主机编号的五种方法
    element 表格拖拽保存插件
    程序员如何悄悄拔尖,然后惊艳四座?
    EasyNLP 开源中文 NLP 算法框架
    excel+requests管理测试用例接口自动化框架
    第1关:节点监听机制
  • 原文地址:https://blog.csdn.net/Rssqzqyp/article/details/133125454