Pre-Honeycomb(Android 3),每个Activity都已注册,可通过onClickLayout的XML中的标签处理按钮点击:
android:onClick="myClickMethod"
Run Code Online (Sandbox Code Playgroud)
在该方法中,您可以使用view.getId()和switch语句来执行按钮逻辑.
随着Honeycomb的推出,我将这些活动分解为碎片,可以在许多不同的活动中重复使用.按钮的大部分行为都是与Activity无关的,我希望代码驻留在Fragments文件中,而不使用OnClickListener为每个按钮注册的旧(pre 1.6)方法.
final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
Run Code Online (Sandbox Code Playgroud)
问题是,当我的布局被夸大时,它仍然是接收按钮点击的托管活动,而不是单个碎片.对两者都有好的方法
在最新版本的ADT(r17)中,添加BuildConfig.DEBUG了根据构建类型设置的生成常量.我遇到的问题是它永远不会设置为false,我希望它在执行"Android工具 - >导出签名的应用程序包"时会改变,但它不适合我.
那么我该如何更改构建类型呢?
添加了一项功能,允许您仅在调试模式下运行某些代码.Builds现在生成一个名为BuildConfig的类,其中包含一个DEBUG常量,该常量根据您的构建类型自动设置.您可以检查代码中的(BuildConfig.DEBUG)常量以运行仅调试函数
所以我正在为我的应用程序从3.0到4.0进行更新,我遇到了模拟器的问题.具体来说,使用Galaxy Nexus~ish皮肤时不会出现软件按钮(我不确定它的确切位置,但它应该足够接近).
这是WXGA720,它的价值:
Hardware Back/Home keys = no
Abstracted LCD Density = 320
Keyboard Lid Support = no
Max VM Heap = 48
Device Ram Size = 1024
Run Code Online (Sandbox Code Playgroud)
第一行是最重要的,因为它告诉模拟器我们需要返回/ home的软件密钥.这可以使用WXGA800皮肤(平板电脑) - 甚至使用API级别14(ICS).
(不要介意屏幕截图中的jaged边缘,我将模拟器按比例缩小 - 这不会影响不显示的键)因为你可以看到它很难与模拟器交互,因为我没有后退/主页按钮.
因此,软件密钥显示为平板电脑皮肤,而不是手机.还有其他人解决了这个问题吗?
编辑
我已经更改了屏幕截图以反映最新版本的工具r16.按钮显示使用WVGA800皮肤和硬件返回/ home = no.
我目前有我的应用程序缓存图像文件在应用程序的cache子目录中.的图像以使用ListView,并存储在一个HashMap的SoftReferences到Bitmaps.
所以我的问题是,在不膨胀我的应用程序使用的空间的情况下缓存这些图像文件的最佳方法是什么,并且从用户角度保持响应.
我关心的事情:
我知道用户可以清除缓存,并且当内部存储器空间不足时自动完成,但我觉得大多数用户会看到几个MB应用程序并将其卸载.此外,如果空间一直很低,我的应用程序将继续下载图像,使其显得更慢.
大多数设备都预先安装了SD卡,但未插入SD卡时该怎么办?与内部存储相比,SD卡也可能更慢,从而影响我的应用程序的性能.
我应该包含一个选项来选择缓存的位置吗?
我应该尝试管理缓存的大小(在/ cache或/ sdcard中)还是忘记它?
感谢您的时间(我知道的很长一段时间),请发布任何相关经验.
在Eclipse中进行Android开发并运行应用程序时,我的透视图仍保留在"Java"中,但LogCat视图仍然在侧边栏(大纲视图所在的右侧)中打开.
我不希望LogCat打开,这很烦人.如果我想看一下,我可以将视角切换到DDMS.
我试图弄清楚哪些手机在Android开发方面具有大屏幕尺寸.通过文档来看,这是一个非常令人困惑的情况,因为大类别还取决于手机屏幕中像素的密度.
从我看过的内容来看,EVO和Droid X(有大屏幕的人)看起来都被归类为具有高密度的普通屏幕.
哪些手机是MDPI/HDPI,还有大屏幕?
我的最终目标是仅支持HVGA和WVGA屏幕,但我需要确保我不会削减大部分市场.
在Honeycomb中,Loader API被引入作为通过在后台线程上进行繁重工作来向应用程序提供数据的正确方法.在我的应用程序中,我正在努力将所有Cursors 替换为Loader返回Cursors的s.由于Cursor.requery()现在已经折旧,因此建议只调用restartLoader并允许在后台线程上再次完成工作,然后再changeCursor返回onLoadFinished.
所有这一切都非常有效,除了当我想重新查询数据时ListView没有维护它的滚动位置,使用Cursor.requery()它来工作,因为它是与更新数据相同的Cursor实例.
如何在不丢失滚动位置的情况下刷新Loader?
I was wondering if it is possible to set the priority of an IntentService like you can with a Thread. So far I have not found anything.
我正在寻找有关不同音乐联盟服务的建议和偏好,以便在我的Android应用程序中使用.我的最终目标是通过动态联盟链接获得任何艺术家音乐的收入流.音乐应该可以通过网络浏览器购买(不在应用程序中)
我最了解的两个联盟计划是亚马逊和iTunes.这是我的问题:
亚马逊似乎对移动应用程序有一种怨恨,并且在他们的服务条款中,联盟计划无法使用.不确定为什么,但它阻止我使用它们.
iTunes是一个苹果公司的东西,它违背我的道德准则将它们放在Android应用程序中,更不用说我的用户甚至无法通过他们的Android手机购买音乐.
您是否成功使用过任何其他服务?我是否应该打扰联系亚马逊,要求获得在移动应用上使用他们的联营计划的许可?
版主:如果这属于堆栈交换网络中的其他位置,请告诉我,我会移动它.
因此,我试图调试为什么我的手机会随机重启(并希望它不是我的应用程序)。我注意到的唯一模式是,偶尔尝试解锁时,手机会关闭,我必须按住电源按钮才能将其重新打开。
我相信这是在我编写应用小部件时开始发生的,但不能确定。
adb bugreport不会显示任何有趣的内容,无论如何也不会出现内核崩溃
------ LAST KMSG (/proc/last_kmsg) ------
*** /proc/last_kmsg: No such file or directory
------ LAST PANIC CONSOLE (/data/dontpanic/apanic_console) ------
*** /data/dontpanic/apanic_console: No such file or directory
------ LAST PANIC THREADS (/data/dontpanic/apanic_threads) ------
*** /data/dontpanic/apanic_threads: No such file or directory
Run Code Online (Sandbox Code Playgroud)
Logcat在重新启动后不会持续存在,因此我编写了一个小型服务,现在正在为我将其写入磁盘(我们将看看是否在其中找到了任何内容)
以前有人处理过吗?您通常如何调试此类问题?
我的手机是运行4.1.2的gsm银河系,但我在4.1.1上也注意到了