当前位置: 首页 > news >正文

Android:ListView在Fragment中的使用

一、前言:

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

二、代码展示:

页面布局

?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><data><variablename="viewModel"type="com.example.simplenotebook.ui.functionpage.regist.RegistViewModel" /></data><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"tools:context=".ui.functionpage.regist.RegistFragment"><!--学习练习--><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent" /></FrameLayout>
</layout>

item的页面布局:

<?xml version="1.0" encoding="utf-8"?>
<layout 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"><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:layout_marginTop="10dp"android:layout_marginRight="20dp"android:background="@color/white"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:roundPercent="0.2"><TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="15dp"android:gravity="center_vertical"android:textColor="#3D3D3D"android:textSize="14sp" /></androidx.constraintlayout.widget.ConstraintLayout></androidx.constraintlayout.widget.ConstraintLayout></layout>

在java代码中的使用:

新建一个UserBean.java

public class UserBean {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}
public class RegistFragment extends Fragment {private RegistViewModel viewModel;private FragmentRegistBinding binding;private ListView myListView;@Overridepublic void onStart() {super.onStart();}@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);viewModel = new ViewModelProvider(this).get(RegistViewModel.class);}@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {if (binding == null) {binding = FragmentRegistBinding.inflate(inflater,container,false);binding.setViewModel(viewModel);//一定要在xml的<data>中申明好才可以setViewModelbinding.setLifecycleOwner(this);myListView = binding.lv;myListView.setAdapter(new myAdapter(viewModel.userList,getContext()));myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {Log.d("TAG", "onItemClick: "+i);}});}View rootView = binding.getRoot();return rootView;}/*** 给ListView设置适配器*/public class myAdapter extends BaseAdapter{private List<UserBean> list;private Context context;//下面把数据显示到平台上会有用到这个参数public myAdapter(List<UserBean> list, Context context) {//创建构造方法this.list = list;this.context = context;}@Overridepublic int getCount() {//listView能够显示多少数据,,一般是list有多少数据就会显示多少数据return list.size();}@Overridepublic Object getItem(int i) {return null;}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {//把数据显示到界面上//1.拿到布局文件,为了方式view不停创建我们需要做一个判断,当view为空的时候再去创建ViewHoder viewHoder;if (view == null) {//每次都要去找这个控件比较耗时,如何解决呢?我们需要创建一个viewHoderviewHoder = new ViewHoder();view = LayoutInflater.from(context).inflate(R.layout.item_home,viewGroup,false);viewHoder.textView = view.findViewById(R.id.tv);view.setTag(viewHoder);}else {viewHoder = (ViewHoder) view.getTag();}//2.拿到textView,把值传给textView
//            TextView textView = view.findViewById(R.id.tv);viewHoder.textView.setText(list.get(i).getName());Log.i("TAG", "getView: "+i);//3.把view返回出去return view;}}private final class ViewHoder{TextView textView;}
}

Fragmennt对应的view Model


public class RegistViewModel extends ViewModel {public List<UserBean> userList = new ArrayList<>();public void setData(){for (int i = 0; i < 100; i++) {UserBean ub = new UserBean();ub.setName("流沔"+i);userList.add(ub);}}
}

三、效果展示:

http://www.lryc.cn/news/172661.html

相关文章:

  • BIGEMAP在土地规划中的应用
  • 软件测试常见术语和名词解释
  • prometheus+process_exporter进程监控
  • 四川玖璨电子商务有限公司专注抖音电商运营
  • python LeetCode 刷题记录 83
  • Grom 如何解决 SQL 注入问题
  • 腾讯mini项目-【指标监控服务重构】2023-07-19
  • 抖音矩阵系统源代码开发部署--SaaS开源技术开发文档
  • CLIP模型资料学习
  • 【c语言】贪吃蛇
  • 【Node.js】定时任务cron:
  • vue3 引入element-plus
  • 数据通信——传输层TCP(超时时间选择)
  • 【数据库索引优化】
  • WebGL 选中物体
  • 科目二倒车入库
  • PostgreSQL如何支持PL/Python过程语言
  • 【C++】STL之适配器---用deque实现栈和队列
  • PHY6230低成本遥控灯控芯片国产蓝牙BLE5.2 2.4G SoC
  • OceanBase杨传辉传递亚运火炬:国产数据库为“智能亚运”提供稳稳支持
  • 分布式锁实现方法
  • 软件测试缺陷报告详解
  • pytorch冻结参数训练的坑
  • P1827 [USACO3.4] 美国血统 American Heritage(前序 + 中序 生成后序)
  • 【四、centOS安装docker】
  • 想学嵌入式开发,薪资怎么样?
  • SQL死锁进程内容查询语句
  • Ubuntu 20.04中Nightingale二进制部署
  • 深入探讨Java面试中内存泄漏:如何识别、预防和解决
  • win10 安装.net framework 3.5,错误代码0x8024401C