小编dav*_*ber的帖子

Android获得之前的活动

我有2个活动:Activity1Activity2.在每个活动中都有一个按钮,可以引导我进行第三个活动(MainActivity).在MainActivity我想知道从哪个活动页面调用.

android android-activity

44
推荐指数
3
解决办法
5万
查看次数

使用Google Play服务时如何避免65k方法限制

如果你发现自己正在编写一个依赖于许多不同库的大型Android应用程序(我建议不要重新发明轮子),很可能你已经遇到了Dalvik可执行文件的65k方法限制classes.dex.此外,如果您依赖于像Google Play Services SDK这样的大型库本身已经在5.0版中包含了超过20k的方法,那么您将不得不使用诸如剥离包multidex支持之类的技巧来避免打包时出错.由于Android Lollipop多个dex文件更易于处理,因此Android的新运行时ART已公开发布,但目前开发人员仍被迫进行方法计数.

在使用Google Play服务时减少应用程序方法计数的最简单方法是什么?

android dalvik dex google-play-services android-gradle-plugin

13
推荐指数
1
解决办法
4376
查看次数

为什么BuildConfig类使用Boolean.parseBoolean()而不是文字值?

在查看BuildConfig由Android Studio和Gradle插件生成的类时,可以看到该BuildConfig.DEBUG字段是使用Boolean.parseBoolean(String)调用初始化的,而不是使用其中一个布尔文字truefalse.

当我使用Gradle添加自定义构建属性时,我会这样做:

android {
    buildTypes.debug.buildConfigField 'boolean', 'SOME_SETTING', 'true'
}
Run Code Online (Sandbox Code Playgroud)

但是看看生成的信息BuildConfig告诉我谷歌采用了与DEBUG旗帜不同的方法:

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");

  // more fields here

  // Fields from build type: debug
  public static final boolean SOME_SETTING = true;
}
Run Code Online (Sandbox Code Playgroud)

使用Boolean.parseBoolean(String)而不是文字有什么好处?

android buildconfig android-gradle-plugin

11
推荐指数
1
解决办法
2261
查看次数

为什么view.startAnimation(动画)在从事件调用时不起作用?

我创建了一个自定义视图,它使用虚拟TranslateAnimation来设置一些布局属性.我使用Interpolator计算高度,并将其应用于TranslateAnimation的applyTransformation()方法内的视图.

如果我从我的Activity中触发动画,这工作得很好.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Log.i("test", "onCreate()");
    view.expand(); // This method starts the animation
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用触摸事件做同样的事情时,没有任何反应.

@Override
// This method is touch handler of the View itself
public boolean onTouch(View v, MotionEvent event) {
    Log.i("test", "onTouch()");
    this.expand(); // onTouch is part of the view itself and calls expand() directly
    return true;
}
Run Code Online (Sandbox Code Playgroud)

我的expand方法如下所示:

public void expand() {
    Log.i("test", "Expand!");

    TranslateAnimation anim = new TranslateAnimation(0, 0, 0, 0) {

        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) …
Run Code Online (Sandbox Code Playgroud)

android android-animation android-event

7
推荐指数
1
解决办法
3153
查看次数

继承Sails.js模型的属性和生命周期函数

我想创建一个自定义的属性集和生命周期方法,这些属性和生命周期方法在我所有的Sails.js模型之间共享.

Sails.js通过调用Waterline.Collection.extend()方法并提供在/api/models目录中找到的模型定义来自动创建和注册模型对象.

从父级扩展模型定义的最佳方法是什么?我已经尝试过使用_.extend(sails.config.model.parentModel, childModel)但很遗憾,sails对象没有全局暴露(因为这是在加载orm钩子后完成的).我也可以简单地require()在所有模型中使用基本模型并扩展它.

什么是一个与Sails很好的干净方法?

javascript node.js sails.js waterline

7
推荐指数
1
解决办法
4329
查看次数

如何在JavaScript中继承私有成员?

在JavaScript中有一种方法可以将私有成员从基类继承到子类吗?

我希望实现这样的目标:

function BaseClass() {
  var privateProperty = "private";

  this.publicProperty = "public";
}

SubClass.prototype = new BaseClass();
SubClass.prototype.constructor = SubClass;

function SubClass() {
  alert( this.publicProperty );   // This works perfectly well

  alert( this.privateProperty );  // This doesn't work, because the property is not inherited
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现类似于类的模拟,就像我可以继承私有(受保护)属性的其他oop语言(例如C++)一样?

谢谢David Schreiber

javascript inheritance private-members

6
推荐指数
1
解决办法
4700
查看次数

Gradle + AndroidAnnotations会产生重复的类错误 - 需要在每次构建之前清理项目

我在使用gradle构建将IntelliJ IDEA项目迁移到Android Studio时遇到问题.我已经设置了AndroidAnnotations库,就像其他各种帖子中推荐的一样,它工作得很好.但是,当多次编译我的项目而不执行:clean其间的任务时,我收到以下错误消息:

/project-dir/build/source/apt_generated/flavor1/release/com/example/app/MyActivity_.java:15: error: duplicate class: com.example.app.MyActivity_

[more errors here...]
Run Code Online (Sandbox Code Playgroud)

我相信系列中的多个构建失败,因为AndroidAnnotations *_.java总是在:compile任务之前重新创建文件(不检查是否有必要)和:compile任务识别新文件(例如使用时间戳)但已经将它们作为预编译*.class文件找到因此抛出错误.这可能吗?我该如何防止这种行为?我可以为AndroidAnnotations添加必要性检查吗?或者这是另一个问题吗?


更新1:似乎从AndroidAnnotations本身抛出错误,因为:compile我删除时会起作用*.javaapt_generated手动文件夹内的文件时工作.


更新2:

我删除了以下一行 build.gradle:

// Automatically add the generated source code to the source set
android.sourceSets[getSourceSetName(variant)].java.srcDirs += aptOutput
Run Code Online (Sandbox Code Playgroud)

我不知道为什么没有这条线就行.由于我没有使用Android Studio添加文件夹Mark Directory as > Sources Root.可能这是缓存的一些结果?或者gradle以某种方式将我生成的java文件自动添加到类路径中?

尽管如此,我还是会感谢任何评论.


更新3 /解决方案

删除行并将gradle构建文件与Android Studio同步后,自动生成的源代码将作为源根删除,从而导致IDE显示缺少类的错误.

最终,我在Android Annotations github问题上找到了解决方案:https://github.com/excilys/androidannotations/issues/676

我重新添加了将其添加到源集的语句(允许Android Studio将其显示为源根).此外,我使用以下方法从变种源集合中删除了文件:

variant.javaCompile.source = variant.javaCompile.source.filter { p ->
    return !p.getPath().startsWith(aptOutputDir.getPath())
}
Run Code Online (Sandbox Code Playgroud)

现在识别生成的文件,并且重复的类错误消失了.

最好的问候,大卫 …

android gradle annotation-processing android-annotations android-studio

5
推荐指数
1
解决办法
2678
查看次数

调用 onDestroy() 后重用 Fragment 是否安全?

我正在使用Fragment带有 Android 支持库 v7 的类。在我ActivityonCreate()方法中,我创建了一堆片段并将它们存储到我的活动的属性中。

this.firstFragment = new FirstFragment();
this.secondFragment = new SecondFragment();
// and so on
Run Code Online (Sandbox Code Playgroud)

我使用导航抽屉模式在应用程序的片段之间切换。要更改活动片段,我使用以下代码。

// Replace the current content of the fragment holder with the selected section fragment.
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.container, selectedFragment).commit();
Run Code Online (Sandbox Code Playgroud)

这会导致调用onDestroy()已删除的片段。在调用片段后重用片段是否安全onDestroy(),或者我应该在每次向用户显示片段时重新创建片段。

这是时间与内存消耗的问题,因为至少其中一个片段需要一些时间来创建。

android android-fragments android-support-library

3
推荐指数
1
解决办法
1777
查看次数

如何将测试替代注入默认依赖关系图中?

我想使用Kodein将模拟替代插入我的Android工具测试中。我不知道哪种方法最合适。这就是我的想法:

  • 我的应用程序使用KodeinAware应用程序类。托管的Kodein实例包含我的应用程序所需的所有依赖项。
  • 在我的测试中,我想为特定依赖项注入模拟替代,以测试各种情况下应用程序的行为。
  • 每次测试的替代均应不同,并且应在测试运行之前/期间注入。

配置Kodein扩展在这种情况下明智的,或者是有一个更简单,更适合的方法(如果有的话,它)?

android kotlin kodein

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