首页 > 其他分享 >(原创)安卓在fragment里使用自定义ListView

(原创)安卓在fragment里使用自定义ListView

时间:2023-12-23 22:13:28浏览次数:40  
标签:getCurrentNum task 自定义 fragment 安卓 convertView ListView 适配器

原创声明:本文所有图片和代码皆由本人制作和编写。

目录

前言

在网上找了很久,如何在fragment里使用自定义的ListView,但是出现了各种Bug。甚至还有的人直接就下结论,没法这样用,必须要使用ListFragment。但是在我的一次次debug后,终于实现了。

故在此简练地记下这种方法。



目标

image



5步走

第零:准备好你的ListItem布局

即,你要为想展示的每个小项目做个模板。
例如我的模板是这样的:
image


第一:在布局文件添加ListView组件

哪个fragment需要ListView组件就在该fragment的.xml布局文件添加如下代码:

    <ListView
        android:id="@+id/my_listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>

第二:创建适配器

新建一个类,继承自ArrayAdapter<你自己提供数据的类>

实现构造器(在这里提供数据)

  • 注意:一定要记住在这里给父类构造器传入数据集合!!他有多个构造函数,少写一个参数不会报错,但就是不会显示任何数据。
public TodayListAdapter(@NonNull Context context, int resource, List<Task> tasks) {
        //一定要记住在这里给父类构造器传入数据集合 不然什么都显示不出来
		super(context, resource,tasks);
        this.tasks = tasks;
        this.resourceId = resource;
    }

实现getView(在这里绑定布局)

@NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        // 获取当前的任务项
        Task task = getItem(position);
        //实例化一个布局 在这里绑定你的小项目模板
        convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.today_list_item, parent,false);
	//根据你的代码逻辑修改信息
        TextView textViewTaskName = convertView.findViewById(R.id.taskName_todayitem_textView);
        TextView textViewTaskFrequency = convertView.findViewById(R.id.taskFre_todayitem_textView);

        if (task != null) {
            textViewTaskName.setText(task.getTaskName());
            textViewTaskFrequency.setText(task.getCurrentNum() + "/" + task.getFrequency());
        }
        return convertView;
    }


第三: 把第一步的xml文件里的ListView和第二步的适配器联系起来

打开你的fragment java代码

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
	//选用你写的fragment 布局
        View rootView = inflater.inflate(R.layout.fragment_today, container, false);

        // 绑定 你在第一步fragment 布局里的listView组件的id
        listView = rootView.findViewById(R.id.today_listView);

        // 初始化自定义适配器
        TodayListAdapter taskAdapter = new TodayListAdapter(requireContext(), R.layout.today_list_item, tasks);

        //绑定
        listView.setAdapter(taskAdapter);
        taskAdapter.notifyDataSetChanged();

        return rootView;
    }


第四:为每个小条目添加点击事件监听器

我是在适配器的getView方法写的。示例:

Button clockIn_btn = convertView.findViewById(R.id.clockIn_todayitem_btn);
        //打卡按钮事件监听器
        clockIn_btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if(task.getCurrentNum() < task.getFrequency()){
                    //TODO:更新统计表
                    //这一次做完
                    task.setCurrentNum(task.getCurrentNum() + 1);
                    if(task.getCurrentNum() == task.getFrequency()){
                        // 获取当前日期
                        Toast.makeText(getContext(), "执行统计表插入", Toast.LENGTH_SHORT).show();
                        Date currentDate = new Date();
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        String formattedDate = sdf.format(currentDate);
                        myDataHelper.insertStatistic(task.getTaskName(),formattedDate);
                    }
                    myDataHelper.updateCurrentNum(task.getTaskName(),task.getCurrentNum());
                    textViewTaskFrequency.setText( task.getCurrentNum() + "/" + task.getFrequency());
                }else{
                    //Toast.makeText(getContext(), "今日已经完成咯~", Toast.LENGTH_SHORT).show();
                }
            }
        });


后记

感谢你看到这里。

标签:getCurrentNum,task,自定义,fragment,安卓,convertView,ListView,适配器
From: https://www.cnblogs.com/lmj00/p/17923726.html

相关文章

  • SpringSecurity:自定义身份认证异常处理器不生效
    由于我配置了全局异常处理器,再配置身份认证异常处理器后,发现异常直接被全局异常处理器捕获了@RestControllerAdvice("com.gsy.wy")@Slf4jpublicclassGlobalException{@ExceptionHandler(Exception.class)publicResulthandlerException(Exceptione){l......
  • 安卓之DocumentsProvider应用场景以及优劣分析
    文章摘要本文深入探讨了安卓DocumentsProvider的应用场景,分析了其优势与不足,并提供了简单的代码实现。DocumentsProvider是安卓系统中用于文件存储与访问的关键组件,为应用开发者提供了强大的文件管理能力。正文DocumentsProvider概述DocumentsProvider是安卓系统中的一个组件,允许应......
  • 安卓之DocumentsProvider应用场景以及优劣分析
    文章摘要本文深入探讨了安卓DocumentsProvider的应用场景,分析了其优势与不足,并提供了简单的代码实现。DocumentsProvider是安卓系统中用于文件存储与访问的关键组件,为应用开发者提供了强大的文件管理能力。正文DocumentsProvider概述DocumentsProvider是安卓系统中的......
  • Net 按照列名的自定义顺序导出Excel
    第一步定义导出Excel的表头一个特性,继承自Attribute,包含列头的名字和列的顺序publicclassExportHeaderAttribute:Attribute{publicExportHeaderAttribute(stringname):this(name,-1){}publicExportHeaderAttribute(stringname,shortorder){......
  • 自定义消息转换器对请求报文的统一解密处理
    1.自定义拦截器Interceptorpackagecom.example.springbootdemo.config;importlombok.extern.slf4j.Slf4j;importorg.springframework.web.servlet.HandlerInterceptor;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;......
  • AC1005 安卓图案解锁
    链接:https://ac.nowcoder.com/acm/contest/20960/1005来源:牛客网题目大意:给定一串序列,判定是不是合法的Android密码.安卓图案解锁的密码有这样的一些特点:1.每个数字最多只会被使用一次。2.如果想直接连接两个数字,但是线段中会经过另一个数字,当且仅有那个数字已经在之前就......
  • 【内网渗透】隐藏cobaltstrike服务器—自定义证书+C2侧写
    简介自定义证书查看Cobaltstrike默认证书发现特征含有cobaltstrike关键字常用keytool命令查看证书文件:keytool-list-v-keystorexx.store修改证书密码:keytool-storepasswd-keystoretest.store修改alias别名:keytool-changealias-keystoretest.store-aliasso......
  • MT6739_MTK6739安卓核心板_mtk核心板定制
    安卓核心板采用MTK方案,基于联发科MT6739平台开发设计,集成GPUPowerVRGE8100570MHz,搭载开放的智能Android操作系统,集成了BASEBAND、UMCP、PMU等核心器件,支持2.4G+5G双频WIFI(可支持1*1MIMO)、BLUETOOTH近距离无线传输技术,支持GNSS无线定位技术,是卓越的全球......
  • spring项目中自定义注解
    使用BeanPostProcessorBeanPostProcessor是Spring框架提供的一个接口,用于在Spring容器中对Bean进行后处理。自定义注解后,可以实现一个BeanPostProcessor实现类,在BeanPostProcessor的postProcessAfterInitialization()方法中,使用ClassPathScanningCandidateResol......
  • Camstar弹出自定义VP
    写在公共类里:  主页面代码如下: 按钮里写代码,或者某方法里写主页面的传递参数定义:  弹出页面如下:   弹出页面代码如下: ......