Androidstudio開發,實現商品分類

文章目錄

    • 1. 功能需求
    • 2. 代碼實現過程
        • 1. 編寫布局文件
        • 2. 創建商品分類(Adapter)適配器
        • 3. 實現商品分類Activity
        • 4. 在res/values/ 下新建 array.xml ,用于添加商品分類數據
        • 5. 效果演示
    • 6. 關于作者其它項目視頻教程介紹

1. 功能需求

在這里插入圖片描述

  1. 顯示商品分類數據
  2. 當分類數據超過一屏時,可以左右滑動顯示
  3. 點擊當前商品分類時,需要高亮顯示,并且默認第一個商品分類選中

2. 代碼實現過程

1. 編寫布局文件

創建一個布局文件activity_main.xml,用戶顯示商品分類頁的內容:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!-- TODO: Update blank fragment layout --><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/purple_200"app:title="商品分類"app:titleTextColor="@color/white" /><androidx.appcompat.widget.LinearLayoutCompatandroid:layout_below="@id/toolbar"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><androidx.appcompat.widget.LinearLayoutCompatandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/topRecyclerView"android:layout_width="match_parent"android:layout_height="wrap_content" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#f5f5f5"app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /><androidx.appcompat.widget.LinearLayoutCompatandroid:id="@+id/empty_view"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="80dp"android:src="@mipmap/img_empty" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="暫無數據~" /></androidx.appcompat.widget.LinearLayoutCompat></RelativeLayout></androidx.appcompat.widget.LinearLayoutCompat></androidx.appcompat.widget.LinearLayoutCompat></RelativeLayout>
2. 創建商品分類(Adapter)適配器
public class CategoryListAdapter extends RecyclerView.Adapter<CategoryListAdapter.MyHolder> {private List<String> categoryList = new ArrayList<>();private int currentPosition = 0;public void setCategoryList(List<String> categoryList) {this.categoryList = categoryList;notifyDataSetChanged();}@NonNull@Overridepublic MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {return new MyHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_category_list, parent, false));}@Overridepublic void onBindViewHolder(@NonNull MyHolder holder, int position) {//綁定數據holder.tv_category_name.setText(categoryList.get(position));if (position == currentPosition) {holder.category_bg.setVisibility(View.VISIBLE);holder.tv_category_name.setTextColor(Color.parseColor("#333333"));} else {holder.category_bg.setVisibility(View.GONE);holder.tv_category_name.setTextColor(Color.parseColor("#666666"));}holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (onItemClickListener != null) {onItemClickListener.onItemClick(position);}}});}@Overridepublic int getItemCount() {return categoryList.size();}static class MyHolder extends RecyclerView.ViewHolder {TextView tv_category_name;View category_bg;public MyHolder(@NonNull View itemView) {super(itemView);tv_category_name =itemView.findViewById(R.id.tv_category_name);category_bg =itemView.findViewById(R.id.category_bg);}}public void setCurrentPosition(int currentPosition) {this.currentPosition = currentPosition;notifyDataSetChanged();}//設置回調public interface OnItemClickListener {void onItemClick(int position);}private OnItemClickListener onItemClickListener;public void setOnItemClickListener(OnItemClickListener onItemClickListener) {this.onItemClickListener = onItemClickListener;}
}

對應布局文件item_category_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"><RelativeLayoutandroid:layout_width="wrap_content"android:layout_height="40dp"android:layout_marginLeft="16dp"android:layout_marginRight="16dp"><Viewandroid:id="@+id/category_bg"android:layout_width="40dp"android:layout_height="6dp"android:layout_alignParentBottom="true"android:layout_centerInParent="true"android:layout_marginBottom="12dp"android:background="#FF8C00" /><TextViewandroid:id="@+id/tv_category_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:gravity="center"android:text="新品推薦"android:textColor="#333333" /></RelativeLayout></LinearLayout>
3. 實現商品分類Activity

MainActivity中,初始化控件,綁定adapter,并實現點擊事件

public class MainActivity extends AppCompatActivity {private RecyclerView topRecyclerView;private CategoryListAdapter mCategoryListAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化控件topRecyclerView = findViewById(R.id.topRecyclerView);//設置布局管理器  可以橫向滑動topRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this, LinearLayoutManager.HORIZONTAL, false));//初始化適配器mCategoryListAdapter = new CategoryListAdapter();//設置適配器topRecyclerView.setAdapter(mCategoryListAdapter);//獲取數據String[] stringArray = getResources().getStringArray(R.array.goods_type);mCategoryListAdapter.setCategoryList(Arrays.asList(stringArray));//topRecyclerView點擊事件mCategoryListAdapter.setOnItemClickListener(new CategoryListAdapter.OnItemClickListener() {@Overridepublic void onItemClick(int position) {mCategoryListAdapter.setCurrentPosition(position);}});}
}
4. 在res/values/ 下新建 array.xml ,用于添加商品分類數據

新建array.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<resources><!--    商品分類-->
<string-array name="goods_type"><item>食品飲料</item><item>日用百貨</item><item>母嬰用品</item><item>家居電器</item><item>美妝個護</item><item>服飾鞋帽</item><item>數碼產品</item><item>文體用品</item><item>醫藥保健</item><item>寵物用品</item>
</string-array></resources>
5. 效果演示

在這里插入圖片描述

6. 關于作者其它項目視頻教程介紹

  1. Android新聞資訊app實戰:https://www.bilibili.com/video/BV1CA1vYoEad/?vd_source=984bb03f768809c7d33f20179343d8c8
  2. Androidstudio開發購物商城實戰:https://www.bilibili.com/video/BV1PjHfeXE8U/?vd_source=984bb03f768809c7d33f20179343d8c8
  3. Android開發備忘錄記事本實戰:https://www.bilibili.com/video/BV1FJ4m1u76G?vd_source=984bb03f768809c7d33f20179343d8c8&spm_id_from=333.788.videopod.sections
  4. Androidstudio底部導航欄實現:https://www.bilibili.com/video/BV1XB4y1d7et/?spm_id_from=333.337.search-card.all.click&vd_source=984bb03f768809c7d33f20179343d8c8
  5. Android使用TabLayout+ViewPager2實現左右滑動切換:https://www.bilibili.com/video/BV1Mz4y1c7eX/?spm_id_from=333.337.search-card.all.click&vd_source=984bb03f768809c7d33f20179343d8c8

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76272.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76272.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76272.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux快速安裝docker和docker-componse步驟

在 CentOS 7 上安裝 Docker 和 Docker Compose 的步驟如下&#xff1a; 1. 安裝 Docker 1.1. 更新系統 首先&#xff0c;確保你的系統是最新版本&#xff1a; sudo yum update -y1.2. 安裝必要的包 安裝 yum-utils&#xff0c;這是管理 YUM 源的工具&#xff1a; sudo yu…

VBA代碼解決方案第二十三講 EXCEL中,如何刪除工作表中的空白行

《VBA代碼解決方案》(版權10028096)這套教程是我最早推出的教程&#xff0c;目前已經是第三版修訂了。這套教程定位于入門后的提高&#xff0c;在學習這套教程過程中&#xff0c;側重點是要理解及掌握我的“積木編程”思想。要靈活運用教程中的實例像搭積木一樣把自己喜歡的代碼…

Pytorch--tensor.view()

在 PyTorch 中&#xff0c;tensor.view() 是一個常用的方法&#xff0c;用于改變張量&#xff08;Tensor&#xff09;的形狀&#xff08;shape&#xff09;&#xff0c;但不會改變其數據本身。它類似于 NumPy 的 reshape()&#xff0c;但有一些關鍵區別。 1. 基本用法 import …

【機器學習】——機器學習思考總結

摘要 這篇文章深入探討了機器學習中的數據相關問題&#xff0c;重點分析了神經網絡&#xff08;DNN&#xff09;的學習機制&#xff0c;包括層級特征提取、非線性激活函數、反向傳播和梯度下降等關鍵機制。同時&#xff0c;文章還討論了數據集大小的標準、機器學習訓練數據量的…

CoAP Shell 筆記

CoAP Shell 筆記 1. 概述 CoAP (Constrained Application Protocol) 是一種專為物聯網 (IoT) 中資源受限的節點和網絡設計的 RESTful Web 傳輸協議。CoAP Shell 是一個基于命令行的交互式工具&#xff0c;用于與支持 CoAP 的服務器進行交互。 2. 主要功能 協議支持&#xff…

【最新】探索CFD的未來:從OpenFOAM到深度學習,全面解析計算流體力學的頂級資源與前沿技術

計算流體力學(CFD)作為現代工程與科學研究的核心工具,正以前所未有的速度邁向智能化與多物理場耦合的新時代。本文全面梳理了在線學習CFD的頂級資源,涵蓋了從傳統數值模擬到深度學習驅動的物理信息模型的廣泛領域,旨在為研究者、工程師和學生提供一站式參考指南。內容分為…

[leetcode]2492. 兩個城市間路徑的最小分數(并查集 排序后建邊)

題目鏈接 題意 給定一個 n n n個點 m m m條邊的無向圖 每條邊有邊權 求1-n的路徑中最小的邊權是多少 每條路可以重復走 思路 把邊按邊權降序排序 用并查集維護連通性 遍歷每條邊 每次合并邊的起點和終點 如果1和n聯通 并且這條邊在1和n的這個連通塊中 就對ans取min Code…

Windows中IDEA2024.1的安裝和使用

如果你也喜歡&#xff0c;記得一鍵三連啊 一、卸載 二、安裝 三、注冊 1、打開Crack文件&#xff0c;直接雙擊 “安裝.bat”&#xff0c;否則可能安裝會出錯&#xff01;&#xff01; 2、選擇【Activation code】&#xff08;不要關閉該界面繼續后面的步驟&#xff09;。 …

【C#】構造協議幀通過串口下發

構造一個“協議幀”&#xff0c;打包串口/網絡通信幀頭部結構的核心部分 &#x1f527; 代碼&#xff1a; List<byte> frame new List<byte>();// 1. 固定幀頭 frame.AddRange(BitConverter.GetBytes(0x0130)); // 幀頭 (4B) frame.AddRange(BitConverter…

04_SQL概述及DDL

文章目錄 一、關于SQL1.1、SQL概述1.2、SQL分類 二、數據庫操作2.1、查看數據庫2.2、切換數據庫2.3、查詢當前使用的數據庫2.4、創建數據庫2.5、查看數據庫創建信息2.6、修改數據庫2.7、刪除數據庫 三、表的操作3.1、數據類型3.1.1、數值類型3.1.2、字符串類型3.1.3、日期時間類…

HCIA-數據通信datacom認證

文章目錄 一、數據通信簡介1.1 標準協議1.2 數據傳輸過程 二、通用路由平臺VRP2.1 VRP簡介2.2 命令行基礎 三 、網絡層協議IP3.1 數據封裝3.2 數據包傳輸2.3 IP地址2.4 子網劃分2.5 ICMP 四、IP路由基礎4.1 路由概述4.2 路由表4.3 路由轉發4.4 靜態路由4.5 動態路由4.6 路由高級…

fast_pow(),c語言冪函數

double fast_pow(double a, int n) { double res 1.0; while (n > 0) { if (n & 1) res * a; // 如果當前位是1&#xff0c;累乘 a * a; // 平方 n >> 1; // 右移一位&#xff08;相當于 n / 2&…

OpenBMC:BmcWeb 處理http請求2 查找路由對象

OpenBMC:BmcWeb 處理http請求1 生成Request和AsyncResp對象_bmc web-CSDN博客 當接收到http請求,并且完成解析后,調用了App::handle處理請求 而App::handle又調用了router.handle(req, asyncResp);來處理請求 1.Router::handle void handle(const std::shared_ptr<Requ…

[Mac]利用hexo-theme-fluid美化個人博客

接上文,使用Fluid美化個人博客 文章目錄 一、安裝hexo-theme-fluid安裝依賴指定主題創建「關于頁」效果展示 二、修改個性化配置1. 修改網站設置2.修改文章路徑顯示3.體驗分類和標簽4.左上角博客名稱修改5.修改背景圖片6.修改關于界面 歡迎大家參觀 一、安裝hexo-theme-fluid 參…

深入理解二叉樹、B樹與B+樹:原理、應用與實現

文章目錄 引言一、二叉樹&#xff1a;基礎而強大的結構基本概念特性分析Java實現應用場景 二、B樹&#xff1a;適合外存的多路平衡樹基本概念關鍵特性查詢流程示例Java簡化實現典型應用 三、B樹&#xff1a;數據庫索引的首選核心改進優勢分析范圍查詢示例Java簡化實現實際應用 …

8.4考研408簡單選擇排序與堆排序知識點深度解析

考研408「簡單選擇排序與堆排序」知識點全解析 一、簡單選擇排序 1.1 定義與核心思想 簡單選擇排序(Selection Sort)是一種選擇排序算法,其核心思想是: 每趟選擇:從待排序序列中選擇最小(或最大)的元素,與當前位置的元素交換。逐步構建有序序列:經過 n ? 1 n-1

為什么需要開源成分分析?庫博同源分析工具介紹

在當今的軟件開發世界中&#xff0c;開源組件已經成為不可或缺的一部分。無論是加速開發進程&#xff0c;還是降低開發成本&#xff0c;開源組件都為我們帶來了巨大的便利。然而&#xff0c;隨著開源組件的廣泛使用&#xff0c;安全風險也隨之而來。你是否曾擔心過&#xff0c;…

ros2 humble無法識別頭文件<rclcpp/rclcpp.hpp>

首先在C/C配置中設置路徑&#xff1a; 可以編輯文件.vscode/c_cpp_properties.json ${workspaceFolder}/**/opt/ros/humble/include/**編譯配置 確保配置好了CMakeLists.txt文件。 colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDSON這樣會在目錄下生成compile_com…

常用的排序算法及對比

1. 選擇排序&#xff08;Selection Sort&#xff09; 算法思想與理論推導 基本思想&#xff1a; 每次從待排序數組中選擇最小&#xff08;或最大&#xff09;的元素&#xff0c;將它與當前序列的起始位置交換&#xff0c;逐步將整個數組排序。 推導過程&#xff1a; 設數組長…

Linux基礎入門:從零開始掌握Linux命令行操作

&#x1f64b;大家好&#xff01;我是毛毛張! &#x1f308;個人首頁&#xff1a; 神馬都會億點點的毛毛張 &#x1f388;有沒有覺得電影里的黑客&#x1f412;酷斃了&#xff1f;他們只用鍵盤?就能搞定一切。今天&#xff0c;毛毛張要帶你們體驗這種快感&#x1f600;&…