我有2个活动:Activity1和Activity2.在每个活动中都有一个按钮,可以引导我进行第三个活动(MainActivity).在MainActivity我想知道从哪个活动页面调用.
如果你发现自己正在编写一个依赖于许多不同库的大型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
在查看BuildConfig由Android Studio和Gradle插件生成的类时,可以看到该BuildConfig.DEBUG字段是使用Boolean.parseBoolean(String)调用初始化的,而不是使用其中一个布尔文字true或false.
当我使用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)而不是文字有什么好处?
我创建了一个自定义视图,它使用虚拟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) 我想创建一个自定义的属性集和生命周期方法,这些属性和生命周期方法在我所有的Sails.js模型之间共享.
Sails.js通过调用Waterline.Collection.extend()方法并提供在/api/models目录中找到的模型定义来自动创建和注册模型对象.
从父级扩展模型定义的最佳方法是什么?我已经尝试过使用_.extend(sails.config.model.parentModel, childModel)但很遗憾,sails对象没有全局暴露(因为这是在加载orm钩子后完成的).我也可以简单地require()在所有模型中使用基本模型并扩展它.
什么是一个与Sails很好的干净方法?
在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
我在使用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
我正在使用Fragment带有 Android 支持库 v7 的类。在我Activity的onCreate()方法中,我创建了一堆片段并将它们存储到我的活动的属性中。
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(),或者我应该在每次向用户显示片段时重新创建片段。
这是时间与内存消耗的问题,因为至少其中一个片段需要一些时间来创建。
我想使用Kodein将模拟替代插入我的Android工具测试中。我不知道哪种方法最合适。这就是我的想法:
KodeinAware应用程序类。托管的Kodein实例包含我的应用程序所需的所有依赖项。是配置Kodein扩展在这种情况下明智的,或者是有一个更简单,更适合的方法(如果有的话,它)?
android ×7
javascript ×2
buildconfig ×1
dalvik ×1
dex ×1
gradle ×1
inheritance ×1
kodein ×1
kotlin ×1
node.js ×1
sails.js ×1
waterline ×1