Android studio 微信APP之Fragment中使用ReclerView

如题,本次实验的内容就是在已经创建好的微信程序的首页处,在fragment控件中增加ReclerView控件,实现首页内容的多样化(微信首页的制作参考:微信程序首页)
首先还是对布局进行一个说明:

在fragment对应的layout中添加ReclerView控件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="wrap_content"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_main"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#BBBBBB"/></LinearLayout>

这一步仅仅是将控件添加到fragment中,而并没有对ReclerView进行布局。
因此,我们还要对ReclerView进行布局

ReclerView的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#ffffff">
<!--左侧的图片布局盒子--><LinearLayoutandroid:id="@+id/ll_1"android:layout_width="wrap_content"android:layout_height="125dp"android:gravity="center"><ImageViewandroid:id="@+id/item_goods_img"android:layout_width="100dp"android:layout_height="100dp"android:layout_margin="10dp"android:src="@mipmap/picture1"android:background="#4D2BD5"/></LinearLayout>
<!--右侧文字盒子布局--><LinearLayoutandroid:id="@+id/ll_2"android:layout_width="match_parent"android:layout_height="125dp"android:orientation="vertical"><!--名字TextView所在盒子布局--><LinearLayoutandroid:id="@+id/ll_2_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:layout_marginBottom="10dp"><TextViewandroid:id="@+id/item_goods_nametitle"android:layout_width="90dp"android:layout_height="25dp"android:text=""android:textSize="16sp"android:textColor="#000000" /><TextViewandroid:id="@+id/item_goods_name"android:layout_width="190dp"android:layout_height="25dp"android:text=""android:textSize="20sp"android:textColor="#000000" /></LinearLayout><!--价格TextView所在盒子布局--><LinearLayoutandroid:id="@+id/ll_2_price"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"><TextViewandroid:id="@+id/item_goods_pricetitle"android:layout_width="90dp"android:layout_height="25dp"android:text=""android:textSize="16sp"android:textColor="#000000" /><TextViewandroid:id="@+id/item_goods_price"android:layout_width="190dp"android:layout_height="25dp"android:text=""android:textSize="20sp"android:textColor="#000000" /></LinearLayout></LinearLayout>
</LinearLayout>

接下来就是对控件的函数控制了

首先,我们需要为需要引用的数据建立一个类,来提供数据修改的接口

GoodsEntity.java:
class GoodsEntity implements Serializable {public String imgPath;//图片地址public String goodsName;//货物名称public String goodsPrice;//货物价格public String goodsNameTitle;//商品名称标签public String goodsPriceTitle;//商品价格标签public GoodsEntity() {}public GoodsEntity(String imgPath, String goodsName, String goodsPrice,String goodsNameTitle,String goodsPriceTitle) {this.imgPath = imgPath;this.goodsName = goodsName;this.goodsPrice = goodsPrice;this.goodsNameTitle = goodsNameTitle;this.goodsPriceTitle = goodsPriceTitle;}//图片的路径获取方法public String getImgPath() {return imgPath;}public void setImgPath(String imgPath) {this.imgPath = imgPath;}//商品名字的获取方法public String getGoodsName() {return goodsName;}public void setGoodsName(String goodsName) {this.goodsName = goodsName;}//商品名字标签的获取方法public String getGoodsNameTitle(){return goodsNameTitle;}public void setGoodsNameTitle(String goodsNameTitle){this.goodsNameTitle = goodsNameTitle;}//商品价格标签的获取方法public  String getGoodsPriceTitle(){return goodsPriceTitle;}public void setGoodsPriceTitle(String goodsPriceTitle){this.goodsPriceTitle = goodsPriceTitle;}//商品价格的获取方法public String getGoodsPrice() {return goodsPrice;}public void setGoodsPrice(String goodsPrice) {this.goodsPrice = goodsPrice;}@Overridepublic String toString() {return "GoodsEntity{" +"imgPath='" + imgPath + '\'' +", goodsName='" + goodsName + '\'' +", goodsNameTitle='" + goodsNameTitle + '\'' +", goodsPrice='" + goodsPrice + '\'' +", goodsPriceTitle='" + goodsPriceTitle + '\'' +'}';}}

没有什么好说的,就是定义变量,get变量,set变量,别命名错了就行了

随后,便是重点,我们要创建ReclerView的adapter了
(也就是这里,我们可以控制ReclerView的展现形式,我这里采用的最简单的线性排布)

LinearAdapter:
class LinearAdapter extends RecyclerView.Adapter<LinearAdapter.myViewHolder> {private OnItemClickListener onItemClickListener;private Context context;private ArrayList<GoodsEntity> goodsEntities;public LinearAdapter(Context context,ArrayList<GoodsEntity> goodsEntities){this.context = context;this.goodsEntities = goodsEntities;}@NonNull@Overridepublic LinearAdapter.myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View itemView = View.inflate(context, R.layout.layout_linear_item,null);return new myViewHolder(itemView);}@Overridepublic void onBindViewHolder(@NonNull LinearAdapter.myViewHolder holder, int position) {GoodsEntity data = goodsEntities.get(position);holder.mItemGoodsName.setText(data.goodsName);holder.mItemGoodsPrice.setText(data.goodsPrice);holder.mItemGoodsNameTitle.setText(data.goodsNameTitle);holder.mItemGoodsPriceTitle.setText(data.goodsPriceTitle);}@Overridepublic int getItemCount() {return goodsEntities.size();}class myViewHolder extends RecyclerView.ViewHolder {//定义控件private ImageView mItemGoodsImg;private TextView mItemGoodsName;private TextView mItemGoodsPrice;private TextView mItemGoodsNameTitle;private TextView mItemGoodsPriceTitle;public myViewHolder(@NonNull View itemView) {super(itemView);//找到控件mItemGoodsImg = itemView.findViewById(R.id.item_goods_img);mItemGoodsName = itemView.findViewById(R.id.item_goods_name);mItemGoodsPrice = itemView.findViewById(R.id.item_goods_price);mItemGoodsNameTitle = itemView.findViewById(R.id.item_goods_nametitle);mItemGoodsPriceTitle = itemView.findViewById(R.id.item_goods_pricetitle);//设置点击事件itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (onItemClickListener!=null){onItemClickListener.OnItemClick(v,goodsEntities.get(getLayoutPosition()));}}});}}//设置点击事件监听器public interface OnItemClickListener {public void OnItemClick(View view, GoodsEntity data);}public void setOnItemClickListener(OnItemClickListener onItemClickListener) {this.onItemClickListener = onItemClickListener;}
}

最后就是对fragment的类的函数编写

weixinFragment:
public class weixinFragment extends Fragment {private RecyclerView mRvMain; //定义ReclerView控件private View view;//定义view来设置fragment中的layoutprivate ArrayList<GoodsEntity> goodsEntities = new ArrayList<GoodsEntity>();private LinearAdapter mLinearAdapter;public weixinFragment() {// Required empty public constructor}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentview = inflater.inflate(R.layout.tab01, container, false);initRecyclerView();initData();return view;}//private void initRecyclerView() {mRvMain = (RecyclerView)view.findViewById(R.id.rv_main);mLinearAdapter = new LinearAdapter(getActivity(),goodsEntities);mRvMain.setAdapter(mLinearAdapter);mRvMain.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false));mRvMain.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL));mLinearAdapter.setOnItemClickListener(new LinearAdapter.OnItemClickListener() {@Overridepublic void OnItemClick(View view, GoodsEntity data) {Toast.makeText(getActivity(),"图片售罄",Toast.LENGTH_SHORT).show();}});}//private void initData(){for (int i=0;i<10;i++){GoodsEntity goodsEntity = new GoodsEntity();goodsEntity.setGoodsNameTitle("  图片名称:");goodsEntity.setGoodsName("图片序号"+i);goodsEntity.setGoodsPriceTitle("  图片价格:");goodsEntity.setGoodsPrice("1"+i*100+"RMB");goodsEntities.add(goodsEntity);}}}

至此 大功告成,值得一提的是,在这个项目中,我设置的图片是直接去一张图片来显示,也可以在fragment中设置文件路径,然后我们对图片的命名采用迭代的命名方式(就是img1、img2这样子一直下去),然后在initData函数中使用goodsEntity.setImgPath("…/mipmap/"+i);的方式来一次获取图片。。。
但是图片太难找了。。。emmm所以这里就直接用一张图片放上去意思一下算了
那么最后,附上整个项目的源码,需要的码云自取
码云仓库

Android studio 微信APP之Fragment中使用ReclerView相关推荐

  1. 【Android Studio安装部署系列】十八、Android studio更换APP应用图标

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio新建项目后会有一个默认图标,那么如何更换图标呢? 替换图标 这个方案不建议直接在已有项目上更换图标,建议 ...

  2. android studio运行APP到手机

    android studio运行APP到手机 一.数据线连接手机调试 1.打开android手机的开发者模式(机型不一样,打开方式不一样,具体可百度) 2.用数据线把电脑和手机连起来(最好用原装数据线 ...

  3. Android studio设计app登录界面

    Android studio设计app登录界面 UI界面设计 在设计登录界面时,可以使用不同布局方式来实现该功能,通常情况下使用的是LinearLayout(线性布局)和TableLayout(表格布 ...

  4. android app启动图片 加动画效果,Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案...

    Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案 大家在设计APP的末期,都会想给APP搞一些"花里胡哨"的特效来提高APP的B格.博主表示亲测有效 ...

  5. Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计源码【详解】

    目录 一.前言 二.效果展示 1.APP界面展示 2.C51硬件展示 三.Android Studio APP源代码 1.AndroidManifest.xml 1.请求联网: 2.开放明文传输: 2 ...

  6. Android Studio 安装app 时 INSTALL_FAILED_CONFLICTING_PROVIDER错误的方法

    通过Android studio 直接安装app时提示 NSTALL_FAILED_CONFLICTING_PROVIDER的错误,如下图: 问题 分析: 出现这个问题的是由于provider的aut ...

  7. android 矢量图形文件,Android Studio进行APP设计开发之矢量图及XML文件转换

    Android Studio进行APP设计开发之矢量图及XML文件转换 当我们使用Android studio进行APP设计开发时,会用到矢量图,那么要将矢量图运用到安卓工程drawable中去,就需 ...

  8. 自动化软件测试 - 通过 Android Studio 开发 App 自动拦截读取短信验证码

        之前一期介绍了怎样通过 Python 的代码去获取短信验证码去进行软件测试,这一期将主要介绍 怎样 通过 Android Studio 开发 App 自动拦截读取短信验证码.     Andr ...

  9. android微信支付都需要什么意思,Android开发微信APP支付功能的要点小结

    基本概念 包名值得是你APP的包,在创建工程时候设置的,需要在微信支付平台上面设置. 签名指的是你生成APK时候所用的签名文件的md5,去掉:全部小写,需要在微信支付平台上面设置. 调试阶段,签名文件 ...

最新文章

  1. DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~)
  2. android 重置画布,android-自定义视图:重按视图画布
  3. 数据结构与算法——二叉树与图
  4. 细节:js 对象继承的几种模式举例
  5. 【Anaconda安装包】如何在Ananconda环境下安装CV2(opencv)
  6. 随机过程(二):更新过程的详细理解
  7. 中孚计算机保密 卸载,智华计算机终端保密检查系统怎样卸载
  8. 腾讯云实验室:搭建 LNMP 环境
  9. 用环状天线测向电压表鉴相器电路定位的无线电测向仪
  10. 关于SCI、EI、CCF、DASFAA
  11. 移动互联网时代的 Google,战略指向笔记本
  12. c++实现currency类(两种)
  13. c 语言里 x 表示,\X在C语言里表示什么意思?
  14. 使用Logstash接收Netflow日志并发送到syslog服务器
  15. win7计算机限制不能安装,win7怎么禁止安装软件_windows7禁止安装软件的方法
  16. MATLAB的动态图,伪色彩图、矢量图、流线图,散点图折线图的绘制例子--流体力学;LBM
  17. docker环境搭建(生信学习)
  18. 时分秒针旋转角度换算
  19. Insights直播回顾——手语服务,助力沟通无障碍
  20. AI助力生命科学创新范式变革 正突破新药研发“双十”困局

热门文章

  1. LICEcap 屏幕录制工具
  2. 《定位》艾·里斯 杰克·特劳特.pdf完整电子版营销经典免费赠送!
  3. FLASH时钟(www.lancu.com)
  4. 【Java笔记+踩坑】SpringBoot——基础
  5. 变味的校园App:网游色情内容泛滥,K12成重灾区...
  6. 什么是Web Service:/什么是Web服务
  7. c语言字符串递归例子,c语言函数递归(简单的递归例子c语言)
  8. 陌陌Q3季报图解:净利环比下降28% 沈南鹏退出董事会
  9. CorelDRAW2023序列号及下载安装条件
  10. 钉钉markdown格式换行