【Android】试着写一个资讯界面(含不同板块)

news2024/12/26 20:46:57

跟着视频做的,并不能动脑子,于是自己顺一遍流程!(只阅读了部分教程,代码不完全相同)(仅为静态界面不含跳转)(在fragment上)此为视频链接
成果图:
在这里插入图片描述

1.首先哈,创建一个NewsFragment,在fragment写ui界面。直接:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".fragment.NewsFragment">
    <LinearLayout
        android:id="@+id/tti"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@color/pink1"
        android:orientation="vertical"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="39dp"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="47dp"
        android:layout_marginRight="24dp"
        android:background="@drawable/shape_search_box"
        android:gravity="center_vertical"
        android:orientation="horizontal">

        <ImageView
            android:layout_width="22dp"
            android:layout_height="22dp"
            android:layout_marginLeft="13dp"
            android:src="@mipmap/search" />

        <EditText
            android:id="@+id/et_search"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="11dp"
            android:background="@null"
            android:hint="搜索您想要搜索的资讯"
            android:textColor="@color/black"
            android:textColorHint="#737373"
            android:textSize="15sp" />

    </LinearLayout>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="100dp">

    </androidx.recyclerview.widget.RecyclerView>


</FrameLayout>

2.创建一个Entity,写入需要信息。<暂时只需type一个变量足够>

这里我命名为NewsEntity,private int type;,生成get、set函数。

3.创键一个适配器

写一个新的类 NewsAdaper extends RecyclerView.Adapter<RecyclerView.ViewHolder>

首先,传入重写getItemViewType(),在使用RecyclerView等列表控件时,每个列表项都需要根据不同的数据类型进行不同的布局和显示处理,getItemViewType()方法就是用来返回每个位置对应的数据类型的。

@Override
    public int getItemViewType(int position) {
        int type=data.get(position).getType();//get(position)指的是获取列表中指定位置的数据对象
        return type;//传入onCreateViewHolder
    }

写出自己需要的ViewHolder。

ViewHolder是一种用于提高RecyclerView列表控件性能的设计模式。在RecyclerView中,每个Item对应一个ViewHolder,ViewHolder用于管理当前Item的布局和显示。ViewHolder可以在不重复创建视图的情况下缓存Item视图,从而避免了频繁的视图创建和销毁操作,提高了列表控件的性能。
通常,在实现RecyclerView.Adapter时,需要重写onCreateViewHolder()和onBindViewHolder()方法来创建ViewHolder并绑定数据。在onCreateViewHolder()方法中,我们会创建一个ViewHolder对象,并将Item的布局文件(即Item的外观样式)作为参数传入ViewHolder构造函数中。在onBindViewHolder()方法中,我们将数据与ViewHolder进行绑定,即将数据填充到Item的布局中,实现显示效果。这样每次滚动列表时,就可以重复使用已经创建好的ViewHolder对象去更新Item的UI,而不是频繁地创建和销毁视图对象。

这里我写了三个,可供参考:

  static class ViewHolderOne extends RecyclerView.ViewHolder{
        public ViewHolderOne(@NonNull View view) {
            super(view);
        }
    }
    static class ViewHolderTwo extends RecyclerView.ViewHolder{
        public ViewHolderTwo(@NonNull View view) {
            super(view);
        }
    }
    static class ViewHolderThree extends RecyclerView.ViewHolder{
        public ViewHolderThree(@NonNull View view) {
            super(view);
        }
    }

下面重写onCreateViewHolder()和onBindViewHolder()方法,不再提供news_item_one等,测试只需要自己制作几个item的xml界面即可!

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if(viewType==1){
            View view= LayoutInflater.from(mContsxt).inflate(R.layout.news_item_one,parent,false);
            return new NewsAdaper.ViewHolderOne(view);//封装控件
        }else if(viewType==2){
            View view= LayoutInflater.from(mContsxt).inflate(R.layout.news_item_two,parent,false);
            return new NewsAdaper.ViewHolderTwo(view);//封装控件
        }
        else {
            View view= LayoutInflater.from(mContsxt).inflate(R.layout.news_item_three,parent,false);
            return new NewsAdaper.ViewHolderThree(view);//封装控件
        }
    }
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

        int type=getItemViewType(position);
        if(type==1){
            NewsAdaper.ViewHolderOne vh= (NewsAdaper.ViewHolderOne) holder;
        }
        else if(type==2){
            NewsAdaper.ViewHolderTwo vh= (NewsAdaper.ViewHolderTwo) holder;
        }
        else {
            NewsAdaper.ViewHolderThree vh= (NewsAdaper.ViewHolderThree) holder;
        }
        //绑定数据
        NewsEntity newsEntity = data.get(position);
    }

4.修改NewsFragment

在onCreateView()函数添加内容:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v=inflater.inflate(R.layout.fragment_news, container, false);
        RecyclerView recyclerView=v.findViewById(R.id.recyclerView);
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getActivity());
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(linearLayoutManager);
        //仅测试
        List<NewsEntity> data=new ArrayList<>();
        for (int i = 0; i < 15; i++) {
            NewsEntity newsEntity=new NewsEntity();
            int type=i%3+1;
            newsEntity.setType(type);
            data.add(newsEntity);

        }
        NewsAdaper newsAdaper=new NewsAdaper(getActivity(),data);//传入适配器
        recyclerView.setAdapter(newsAdaper);//渲染上去

        return v;
    }

然后就成功啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/515781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

07-HTML-链接标签

<a> 标签定义超链接&#xff0c;用于从一张页面链接到另一张页面。<a> 元素最重要的属性是 href 属性&#xff0c;它指示链接的目标。 属性值描述downloadfilename规定被下载的超链接目标。hrefURL规定链接指向的页面的 URL。pinglist_of_URLs规定以空格分隔的 UR…

YOLOv8 人体姿态估计(关键点检测) python推理 ONNX RUNTIME C++部署

目录 1、下载权重 ​2、python 推理 3、转ONNX格式 4、ONNX RUNTIME C 部署 1、下载权重 我这里之前在做实例分割的时候&#xff0c;项目已经下载到本地&#xff0c;环境也安装好了&#xff0c;只需要下载pose的权重就可以 2、python 推理 yolo taskpose modepredict model…

ESP32设备驱动-PCA9685 LED控制器驱动

PCA9685 LED控制器驱动 文章目录 PCA9685 LED控制器驱动1、PCA9685介绍2、硬件准备3、软件准备4、驱动实现1、PCA9685介绍 PCA9685 是一款 IC 总线控制的 16 通道 LED 控制器,针对红色/绿色/蓝色/琥珀色 (RGBA) 彩色背光应用进行了优化。 每个 LED 输出都有自己的 12 位分辨率…

scala中match使用报错Scala.matchError:(of class java.lang.String)

1.遇到错误 Scala.matchError:(of class java.lang.String) 2.发现问题出在match使用中,如下写法就会报错 val partitionIndex key.toString match {case "chinese" > 0case "math" > 1case "english" > 2} 3.后来修改了写法&#xf…

【大数据学习篇3】HDFS命令操作与MR单词统计

1. HDFS命令使用 [rootmaster bin]# su hd[hdmaster bin]$ #查看/目录[hdmaster bin]$ hdfs dfs -ls / 5 #在/目录创建一个为test名字的文件夹[hdmaster bin]$ hdfs dfs -mkdir /test#查看/目录[hdmaster bin]$ hdfs dfs -ls Found 1 itemsdrwxr-xr-x - hd supergroup …

【rust】| 04——语法基础 | 函数

系列文章目录 【rust】| 00——开发环境搭建 【rust】| 01——编译并运行第一个rust程序 【rust】| 02——语法基础_变量(不可变?)和常量 【rust】| 03——语法基础 | 数据类型 【rust】| 04——语法基础 | 函数 【rust】| 05——语法基础 | 流程控制 文章目录 函数1. 定义函数…

Lecture 15:元学习Meta Learning

目录 Review Machine Learning Introduction of Meta Learning What is Meta Learning? Meta Learning的三个步骤 Meta Learning的framework&#xff1a; ML v.s. Meta Meta Learning的training What is learnable in a learning algorithm? 初始化参数θ0 Optimiz…

用 Phthon 写抽奖程序

一共 10 人参与抽奖&#xff0c;四人中奖&#xff0c;其中一人固定不变。 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… 地址&#xff1a…

windows 打包 inno setup

1.下载并安装 inno setup 官网下载地址 点击下载并安装inno setup 软件,安装完成后点打开软件 在上图中点击 cancel 回到inno setup 的主界面 ①在主界面点击File -> New 然后在向导界面点击 next 填写安装信息点击next 如下图 点击next e 选择exe的位置, add folder …

实战打靶集锦-019-BTRSys2.1

提示&#xff1a;本文记录了博主的一次普通的打靶经历 目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 FTP服务探查4.2 Apache服务探查4.2.1 wpscan扫描4.2.2 Metasploit神器4.2.3 手工探查页面4.2.3.1 Appearance Editor4.2.3.2 Plugins Editor 5. 提权5.1 系统信息枚…

KVM存储池管理与磁盘格式

KVM存储池管理与磁盘格式 KVM必须配置一个目录作为存储磁盘镜像&#xff08;存储卷&#xff09;的目录&#xff0c;我们称这个目录为存储池 存储池管理 默认存储池 /var/lib/libvirt/images/ 创建基于文件夹的存储池&#xff08;目录&#xff09; mkdir -p /data/vmfs定义…

详解MySQL覆盖索引、索引下推

目录 1.覆盖索引 1.1.概述 1.2.聚集索引、非聚集索引 1.3.回表查询 1.4.覆盖索引 2.索引下推 1.覆盖索引 1.1.概述 覆盖索引&#xff0c;是为了避免“回表查询”&#xff0c;从而降低查询耗时的一种使用索引的方法&#xff0c;所以要聊覆盖索引首先我们要知道什么是&qu…

HTB-Busqueda

HTB-Busqueda 信息收集80端口 svcsvc -> root 信息收集 80端口 将ip和searcher.htb添加至/etc/hosts文件。 功能能就是你输入一个值&#xff0c;选择好搜索引擎后点击search&#xff0c;就会生成一个选择的搜索引擎里搜索你输入的值的链接。比如输入aster。 如果勾选了自动…

Github配置SSH密钥连接(附相关问题解决)

Github配置SSH密钥连接&#xff08;附相关问题解决&#xff09; 引言 当前&#xff0c;通过Git在本地仓库和远程仓库&#xff08;如Github&#xff09;之间进行操作&#xff0c;已不再支持密码验证&#xff0c;而是转为通过更安全的SSH密钥验证方式。 因此&#xff0c;本文将…

正态分布线性计算的方差推导(含协方差推导)

推导如下&#xff1a; 由于方差是每个数据与均值离差平方和的均值&#xff1a;即对Σ&#xff08;每个数据-均值&#xff09;再求一次均值&#x1f447;&#xfeff;&#xfeff; 最终Var(X) E(X&#xff09;-E&#xff08;X) 因此&#x1f447; Var(X-Y) E(X-Y)-E(X-Y) …

mysql的主从复制和读写分离

1.mysql主从复制和读写分离的相关知识 1.1 什么是读写分离? 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) &#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 …

一个用于Allen脑图谱基因数据的工具箱|abagen

艾伦人类脑图谱&#xff08;Allen Human Brain Atlas&#xff09; 艾伦人类脑图谱是一个由艾伦脑科学研究所(Allen Institute for Brain Science)开发的在线基因表达图谱数据库&#xff0c;旨在提供人类大脑各个区域的细胞类型和基因表达信息。这个数据库包含了人类全基因组微…

【C语言】通讯录(文件版)

前言 前面我们完成了通讯录的静态版本和动态版本&#xff0c;虽然功能已经比较完善了&#xff0c;但是前面的通讯录缺少了存储联系人的能力&#xff0c;所以我们学习了文件的操作管理&#xff0c;这里我们就用上一篇文章的知识来完成这次的文章吧。 关于通讯录的前两篇文章我放…

Lecture 15:元学习Meta Learning2

目录 Meta Learning – MAML MAML Reptile Meta Learning – Gradient Descent as LSTM Meta Learning – Metric-based Meta Learning - TrainTest as RNN Meta Learning – MAML Meta Learning&#xff1a;让机器自动找出learning algorithm Meta Learning的三个步骤&…

Oracle的学习心得和知识总结(二十五)|Oracle数据库Real Application Testing之真实应用测试概述白皮书

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…