Android 碎片学习 之 如何在碎片调用Activity中的方法来进行赋值操作

Overview

Fragment表示FragmentActivity中的行为或界面的一部分。您可以在一个 Activity 中组合多个片段,从而构建多窗格界面,并在多个 Activity 中重复使用某个片段。您可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且您可以在 Activity 运行时添加或移除片段(这有点像可以在不同 Activity 中重复使用的“子 Activity”)。 片段必须始终托管在 Activity 中,其生命周期直接受宿主 Activity 生命周期的影响。例如,当 Activity 暂停时,Activity 的所有片段也会暂停;当 Activity 被销毁时,所有片段也会被销毁。不过,当 Activity 正在运行(处于*已恢复*[生命周期状态](https://developer.android.com/guide/components/activities#Lifecycle))时,您可以独立操纵每个片段,如添加或移除片段。当执行此类片段事务时,您也可将其添加到由 Activity 管理的返回栈 — Activity 中的每个返回栈条目都是一条已发生片段事务的记录。借助返回栈,用户可以通过按*返回*按钮撤消片段事务(后退)。 当您将片段作为 Activity 布局的一部分添加时,其位于 Activity 视图层次结构的某个ViewGroup中,并且片段会定义其自己的视图布局。您可以通过在 Activity 的布局文件中声明片段,将其作为 `` 元素插入您的 Activity 布局,或者通过将其添加到某个现有的 [ViewGroup`](https://developer.android.com/reference/android/view/ViewGroup),利用应用代码将其插入布局。

这个是来自Android 官方的解释。但是在这几天的开发中遇到了一个非常尴尬的的问题。一个关于Fragment 和Activity的通信问题。

是什么问题?

这个就是我开发阶段的问题所在了。

在主界面的底部有一个TextView需要实时的先是当前购物车的数量和总价钱。

但是添加操作在Fragment中进行的。我的添加方法在主界面的活动中,添加需要调用这个方法。但是如果调用在对TextView赋值的时候会出错。

这个就是错误代码。简单来说就是空指针异常。看看我之前的调用是如何实现的:

new PublicActivity().addToShoppingCar(...);

可以看到在这里我就是直接new了个对象,然后直接调用添加方法。这样的操作他的计算是可以实现的,但是一旦你执行赋值等UI操作就会出现空指针错误。

这该如何解决?

你可以去百度一波Android Fragment 和 Activity间通信

随便找一个看看都是说要getActivity。

getActivity是什么?

大概意思为:返回一个和此fragment绑定的FragmentActivity或者其子类的实例。相反,如果此fragment绑定的是一个context的话,可能会返回null。

如何正确的操作Fragment 对Activity的UI操作

那就是需要先获取Activity啦。

看看我们的代码:

PublicActivity publicActivity = (PublicActivity) getActivity();

assert publicActivity != null;

publicActivity.addToShoppingCar(info.getFoodId(), info.getPrice(), info.getFoodName());

这个就是我们的操作代码了。非常的简单,就是先获取我们的被操作的Activity然后通过获取到的Activity去调用我们的操作代码。这样他就可以啦。

源代码贴一下

调用代码

view.findViewById(R.id.img_addToShoppingCar).setOnClickListener(new OnClickListener() {

@Override

public void onClick(View view) {

PublicActivity publicActivity = (PublicActivity) getActivity();

assert publicActivity != null;

publicActivity.addToShoppingCar(info.getFoodId(), info.getPrice(), info.getFoodName());

}

});

被调用代码

@Override

public void addToShoppingCar(String FoodId, String Price, String FoodName) {

Session.shoppingCarList.add(new ShoppingCartEntity(FoodId, FoodName, Price));

this.txtShoppingCarNum.setText(new PublicPresenterImpl().getShoppingCarInfo());

}

//------一条华丽的分割线------//

@Override

public String getShoppingCarInfo() {

int totalPrice = 0;

for (ShoppingCartEntity shoppingCartEntity : Session.shoppingCarList) {

totalPrice += Integer.valueOf(shoppingCartEntity.getFoodPrice());

}

return "Total " + Session.shoppingCarList.size() + ",$" + totalPrice;

}

OK 就这样都散了吧

android碎片按钮,Android 碎片学习 之 如何在碎片调用Activity中的方法来进行赋值操作...相关推荐

  1. 整日碎片化学习“凡不凡”?来看看优秀的Android开发都是如何学习的,破解碎片化学习的骗局!

    前言 人生有好多事情,可以走捷径或者可以找人替代,唯有求知.成长无捷径及无法找人替代. 作为一个3-5年的Android工程师,我们经常会遇到这些瓶颈: 1.技术视野窄:长期在小型软件公司,外包公司工 ...

  2. android碎片按钮,Android 碎片(Fragment)

    Android 碎片(Fragment) 碎片是活动的一部分,使得活动更加的模块化设计.我们可以认为碎片是一种子活动. 下面是关于碎片的重要知识点 - 碎片拥有自己的布局,自己的行为及自己的生命周期回 ...

  3. android 悬停按钮,Android悬浮按钮的使用方法

    悬浮按钮效果如下图所示: 步骤1:引用 compile 'com.laocaixw.suspendbuttonlayout:suspendbuttonlayout:1.0.3' 步骤2:xml布局 a ...

  4. android倒角按钮,Android实现圆角Button按钮

    本文实例讲述了Android开发圆角Button按钮实现过程,分享给大家供大家参考,具体内容如下 需求及效果图: 实现思路: 1.shape实现圆角 在drawable新建两个xml 文件, 这两个 ...

  5. android 正方形按钮,Android《FloatingActionButton》

    悬浮按钮 继承:⇐ FloatingActionButton ⇐ VisibilityAwareImageButton ⇐ ImageButton ⇐ ImageView,所以FloatingActi ...

  6. android 销毁按钮,Android实现所有Activity全部销毁

    <一>.在平时开发中打开过三个activity,分别为:A, B, C,用android设备中的"back"按钮,需要点击三下,才能退出到主界面(即需要三次操作才能销毁 ...

  7. android 椭圆形按钮,Android中使用drawable实现左右椭圆形的按钮

    本文和上一篇文章类似,只是增大了圆角半径的值,所以左右两边看着像椭圆形状,我们先来看看完成后的效果图: 首先,在res/drawable目录下新建一个shape形状,文件名为round_rect_ov ...

  8. android spinner 按钮,android sqlite和spinner的用法示例

    在此示例中,我们在单击按钮时添加了标签,并在微调器上显示了所有添加的标签.如上例所示,需要扩展SQLiteOpenHelper类以在sqlite上执行操作. 我们在DatabaseHandler类中重 ...

  9. android 绘制按钮,Android:使用xml定义创建一个三角形的按钮(可绘制)

    如果有人仍然有这个问题: > xml: android:fromDegrees="45" android:toDegrees="0" android:pi ...

  10. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )

    文章目录 前言 一.DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 二./bin/dexopt 源码分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ...

最新文章

  1. mysql数据库主键自增6_mysql数据库,主键自增主键不连续
  2. vb.net 线程偶尔不会自动关闭_C# 多线程系列(7)手动线程通知
  3. android 处理双击事件
  4. 3.10以上charles版本抓取Https数据包
  5. Windows保护模式学习笔记(五)—— 任务段任务门
  6. java webservice https_WebService的HTTPS访问——解决PKIX错误 | 字痕随行
  7. cannot find -lunwind-x86_64
  8. VSCode 中,TS 提示 ”无法找到 *.vue 声明文件“ 的解决方案
  9. 服务治理---限流(令牌桶算法)
  10. GridView选中,编辑,取消,删除代码
  11. 中石油acm4985: Going Dutch 还钱问题(状压dp)
  12. 《算法导论》读书笔记(总纲)
  13. SQL四种方法实现行列转换超详细
  14. matlab创建数组
  15. 利用pytorch训练好的模型测试单张图片
  16. 支持微信多开、防止消息撤回的小助手
  17. linux手机+华为,基于Linux打造,华为重磅宣布,开始在6款手机测试新系统
  18. 吴刚谈数位红创业故事-4万起步七年历程回顾
  19. Linux文件和目录管理(3)
  20. MySql 根据身份证号判断年龄所属省份与性别男女

热门文章

  1. FPGA原理图设计----Arria II 系列FPGA设计(SATA)
  2. Subversion for Windows 相关工具
  3. WPF DataGrid 获取当前行某列值
  4. 【框架结构】目标检测算法抽象流程
  5. electron打包exe文件
  6. C#的GC机制(来自网摘复制,未整理)
  7. java 并发 处理机制 和 cas 理解
  8. UISegmentedControl触发事件的错误
  9. (转)自定义listView及其adapter动态刷新
  10. struct过滤器和拦截器的区别