小编Kun*_*sai的帖子

Android - 为什么使用接口被认为是在Activity和Fragment之间进行通信的最佳实践?

在本文档"与其他片段进行通信"中,Google告诉我们,传递Activity和Fragment的最佳实践是实现一个接口.然后,此接口可以由Fragment调用并在Activity中执行必要的行为.

但也有一种黑客方式来做到这一点.通过方法"getActivity()"直接获取Activity ,然后我们可以使用它下面的所有"公共方法".

这让我很困惑.因为我无法想到使用黑客方式做任何这一点的任何关键缺点.

我头脑中出现的第一种方法的优点是:

  1. 我可以在我的活动下限制"资源可访问性".但由于Fragment能够调用"getActivity()",因此它实际上可以访问其中的所有"公共"方法.所以这不能说服我.
  2. 代码中更具可读性和故事性.使用第一种方法,代码告诉我们"此活动仅打开片段的这些特定可访问区域".我们可以通过查看Activity中的代码直接知道"Fragment内部可能会干扰Activity的内容" .否则,我们需要打开Fragment下的代码来查看它的作用.

好吧,在我总结出这些之后,我对自己有点说服了.但坦率地说,我真的想要一些其他坚实的,并且必须有理由这样做.任何想法或文件将非常感谢!!

java android interface android-fragments android-activity

9
推荐指数
1
解决办法
2557
查看次数

aapt ERROR获取'android:name'属性:属性不是字符串值

当我的apk生成时,我执行命令aapt dump badging就可以了.我一直收到以下错误:

application:label ='Name'icon ='res/drawable/icon_128x128.png'application
-debuggable launchable -activity:name ='co.package.name.MainActivity'label ='Name'icon =''ERROR getting'android: name'属性:attribute不是字符串值

我试图为所有活动添加标签名称,并删除/ res下的所有其他值-xx文件夹但是徒劳无功.但是,如果我创建一个全新的项目并生成一个新的APK,则可以使用该aapt dump badging命令成功执行APK .

我比较了两个APK的打印消息,发现了一个主要区别:

成功消息apk:

application-label:'AppLabel'application
-icon-160:'res/drawable-xhdpi/icon_128x128.png'application
-icon-240:'res/drawable-xhdpi/icon_128x128.png'application
-icon-320:'res/drawable-xhdpi/icon_128x128.png'application
:label ='AppLabel'icon ='res/drawable-xhdpi/icon_128x128.png'application
-debuggable launchable
-activity:name ='com.demo.testApp.MainActivity'label =''图标="

失败消息apk:

application-label:'MyApp'application
-label-ja:'MyApp'application
-label-de:'MyApp'application
-label-he:'MyApp'application
-label-zh:'MyApp'application
-label-fi:' MyApp的"
应用程序标签-NL: 'MyApp的'
..
..(所有语言将被附连,最后发生错误)
..
应用:标签= 'MyApp的'图标= 'RES /抽拉/ icon_128x128.png'
应用程序- debuggable
launchable-activity:name ='com.name.myapp.MainActivity'label ='MyApp'icon =''
ERROR getting'android :name'属性:attribute不是字符串值


-----编辑------
我发现与"语言"问题无关.我修改了我的Manifest文件并确保没有打印出这样的"application-label-XX",错误仍然是一样的.

下面是我的清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="co.package.name"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" /> …
Run Code Online (Sandbox Code Playgroud)

android apk aapt

8
推荐指数
4
解决办法
1万
查看次数

Jest 模拟函数在另一个函数中被调用时不起作用

我认为我对 Javascript 的理解从根本上是错误的。

在文件 abc.js 中,我有代码

export function returnBoolean() {
  return true;
}

export function output() {
  return returnBoolean();
}
Run Code Online (Sandbox Code Playgroud)

在测试中,我做

import * as abc from "../abc";

it("test", () => {
  abc.returnBoolean = jest.fn();
  abc.returnBoolean.mockReturnValue(false);
  expect(abc.returnBoolean()).toBe(false); // This is success
  expect(abc.output()).toBe(false); // This failed because return is true
});
Run Code Online (Sandbox Code Playgroud)

我不知道为什么 abc.output()return 是true

我真的很困惑。任何想法都非常感谢。谢谢!

javascript mocking jestjs

5
推荐指数
2
解决办法
2040
查看次数