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

这篇具有很好参考价值的文章主要介绍了【Android】试着写一个资讯界面(含不同板块)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

跟着视频做的,并不能动脑子,于是自己顺一遍流程!(仅为静态界面不含跳转)(在fragment上)此为视频链接item界面可去该视频所附上的源码查询。
成果图:
【Android】试着写一个资讯界面(含不同板块)

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;
    }

然后就成功啦!文章来源地址https://www.toymoban.com/news/detail-460599.html

到了这里,关于【Android】试着写一个资讯界面(含不同板块)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在 Android Studio 中创建一个简单的 QQ 登录界面

            打开 Android Studio,选择 \\\"Start a new Android Studio project\\\",然后填写应用程序名称、包名和保存路径等信息。接下来,选择 \\\"Phone and Tablet\\\" 作为您的设备类型,然后选择 \\\"Empty Activity\\\" 作为您的 Activity 模板。         在 Android Studio 中,布局文件用于指定应用程序的用

    2024年02月07日
    浏览(53)
  • 【移动开发学习】 Android Studio 编写一个简单的微信界面

    Android Studio简单还原微信ui 目标 实现3-4个tab的切换效果 技术需求 activity, xml, fragment, recyclerview 成果展示 其中联系人界面通过recyclerview实现了可以滑动列表           仓库地址 https://github.com/SmileEX/wecaht.git 实现过程 主要ui 第一步我们首先把微信的ui主体做出来,即这三个部分

    2024年02月08日
    浏览(66)
  • 【移动开发学习】 Android Studio 编写一个简单的微信界面 (2)

    Android Studio简单还原微信ui 上一期完成内容(前情提要) 上次我们简单地实现了微信的几个初始界面,并且在联系人页面通过recycleview添加了许多的view 目标 建立在上次的基础上,我们来扩展联系人界面的功能,给每一个view添加一个点击功能,让其可以跳转到另一个activity,

    2024年02月05日
    浏览(64)
  • 牛市下一个板块该轮到谁?Gamefi赛道爆发你吃到了多少?

    进入3月中旬以来,比特币在触及7.4万美元的历史峰值之后突然跳水,一度跌至6万美元,至于其他山寨更是惨不忍睹,很多人在问牛市行情结束了吗?当然没有,众所周知,牛市多急跌,每次回调都是为了向更高的位置蓄力。更何况,美元降息的预期依旧,加上比特币减半,

    2024年04月13日
    浏览(40)
  • 跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然

    全是贴图了: 多说无益!!! 开始: 实现一个某安的连接管理: 其中步骤1到7列的明明白白,而且一开始就提出了要有connectionManager,这已经是很职业的方式了,至少不是学生气: 这些肯定不够啊,要给我写代码来看看: 默认是python代码,风格良好。 不要用Python,我想用

    2023年04月15日
    浏览(53)
  • 【嵌入式资讯】Arm 通过引入 Keil MDK 版本 6 将嵌入式软件开发提升到一个新的水平

            随着物联网设备变得越来越智能,开发人员面临着日益增加的软件复杂性,这需要新的开发流程来创建优化的 ML 模型和高效的设备驱动程序。因此,我们为生态系统提供的软件开发平台和工具必须与我们的处理器路线图一起发展。Keil 微控制器开发套件 (Keil M

    2024年02月15日
    浏览(98)
  • AI测试 | 我试着让ChatGPT辅助编写自动化测试,结果……

    作者的话: ChatGPT最近备受关注,官网中提供了许多ChatGPT应用场景,例如SQL翻译、语言翻译、代码解释等。作为一名QA,我更关注 ChatGPT生成的自动化测试脚本质量如何,借助ChatGPT能否提升自动化测试编写效率。当提到自动化测试时,我们通常将其分为单元测试、接口测试和

    2024年02月06日
    浏览(40)
  • [QT基础]QT不同ui界面的简单切换(C++)

            window10,QT 5.11.1,语言c++         设计两个ui界面,能实现一个ui界面到另一个ui界面的跳转。 为了以防万一,如果是第一次使用qt创建ui界面可以参考以下博客 QT界面创建 1,代码思路         两个ui界面,使用一个按钮进行页面的切换,考虑到实际的应用场景,

    2024年02月03日
    浏览(42)
  • 16-3_Qt 5.9 C++开发指南_使用QStyle 设置界面外观_实现不同系统下的界面效果的匹配

    Qt 是一个跨平台的类库,相同的界面组件在不同的操作系统上显示效果是不一样的。QStyle是封装了 GUI 界面组件外观的抽象类,Qt 定义了 QStyle 类的一些子类,应用于不同的操作系统如QWindowsStyle和QMacStyle 等。这些样式是 QtGUI 模块自带的,在不同的平台上编译运行的程序具有缺

    2024年02月13日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包