我可以/应该编辑 R.java 文件吗?如果是这样,怎么办?

2024-03-20

因此,我正在 Eclipse for Android 4.0 中编写一个简单的计算器,并尝试简化我的代码并使其尽可能简单。我试图清理的地方是我的 findViewById() 的。因为我有按钮 0-9 来实例化,所以我有一个十行长的代码块,如下所示:

b0 = (Button) findViewById(R.id.b0);
b1 = (Button) findViewById(R.id.b1);
...
b9 = (Button) findViewById(R.id.b9);

正如你所看到的,这个东西只是在请求一个 for 循环。所以我想做的是制作两个数组。 Activity 中的一个实例变量数组,用于保存数字键盘的所有 Button 实例变量:

private Button[] numberPad = {b0,b1,b2,b3,b4,b5,b6,b7,b8,b9};

然后是 R.java 文件中 id 类中的另一个数组,其中包含所有按钮 id 变量,如下所示:

private static final int[] numberPad = {b0,b1,b2,b3,b4,b5,b6,b7,b8,b9};

太棒了,我可以使用此循环将十行按钮实例化减少为两行:

for(int i = 0; i < numberPad.length; i++)
    numberPad[i] = (Button) findViewById(R.id.numberPad[i]);

当我输入它时,它很好,但是当我保存它时,它会自动恢复为原始形式。我没有看到这段代码有什么问题。据我所知,它不会产生任何错误。为什么我不能以这种方式编辑 R.java 文件?有办法吗?我是不是该?


如前所述,R 文件在每次构建时都会(或应该)自动重新生成。您应该尝试一些依赖注入框架(罗博吉斯 http://code.google.com/p/roboguice/适用于 Android 编程)来解决处理视图的问题。例如,而不是(代码取自项目文档):

class AndroidWay extends Activity { 
TextView name; 
ImageView thumbnail; 
LocationManager loc; 
Drawable icon; 
String myName; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);
    name      = (TextView) findViewById(R.id.name); 
    thumbnail = (ImageView) findViewById(R.id.thumbnail); 
    loc       = (LocationManager) getSystemService(Activity.LOCATION_SERVICE); 
    icon      = getResources().getDrawable(R.drawable.icon); 
    myName    = getString(R.string.app_name); 
    name.setText( "Hello, " + myName ); 
}} 

您可以使用更简单和更短的版本:

class RoboWay extends RoboActivity { 
@InjectView(R.id.name)             TextView name; 
@InjectView(R.id.thumbnail)        ImageView thumbnail; 
@InjectResource(R.drawable.icon)   Drawable icon; 
@InjectResource(R.string.app_name) String myName; 
@Inject                            LocationManager loc; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);
    name.setText( "Hello, " + myName ); 
} } 

这不仅有助于保持视图管理干净和到位,而且在测试时也非常有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以/应该编辑 R.java 文件吗?如果是这样,怎么办? 的相关文章

  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • Android 中如何通过彩信发送图片?

    我正在开发多媒体应用程序 我正在通过相机捕获一张图像 并希望将该图像和文本发送到其他号码 但我不知道如何通过彩信发送图像 MMS 只是一个 http post 请求 您应该使用执行请求额外的网络功能 final ConnectivityMa
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • Android 2.3 模拟器在更新位置时崩溃

    我正在使用 Eclipse 编写和调试 Android 应用程序 我需要做的事情之一是更新设备的位置 因此我尝试使用模拟器控制窗口中的位置控制面板 在 手动 选项卡上 我选择 十进制 输入有效的纬度和经度 然后单击 发送 不幸的是 接下来发
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Dagger 2 没有生成我的组件类

    我正在使用 Dagger 2 创建我的依赖注入 几个小时前它还在工作 但现在不再生成组件 这是我创建组件的地方 public class App extends Application CacheComponent mCacheCompon
  • 在 Samsung Galaxy S5 Android 5.0 上使用 MediaPlayer 加载音频流需要超过 10 秒

    由于更新至 Android 5 0 MediaPlayer 在 Samsung Galaxy S5 上无法正常工作 启动音频流后加载时间超过 10 秒 示例代码 MediaPlayer mPlayer new MediaPlayer Str
  • 卡片视图 单击卡片移至新活动

    我是 Android 编程新手 正在研究卡片布局 我想知道如何使其可点击 android clickable true android foreground android attr selectableItemBackground 我的卡
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 错误:(23, 13) 无法解决:com.google.android.gms:play-services:11.2.0“安装存储库和同步项目”不起作用

    我正在尝试在我的 Android 应用程序中获取位置并更新到服务器 这是我的 Gradle 代码 我在这里包含了compile com google android gms play services 11 2 0 这条线是从文档中 htt
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db
  • Android 后台倒计时器

    我有一个 Android 应用程序 它管理一个倒计时器 类 CountDownTimer 它显示在应用程序屏幕中 以显示到达 00 00 还剩多少时间 我现在的问题是 当我按主页按钮或启动另一个应用程序时 应用程序 计时器不会在后台运行 所
  • Android 屏幕方向错误

    我使用的是 Android HTC HERO 2 1 版本 我写的活动
  • Git 实验分支还是单独的实验存储库?

    我正在开发一个 Android 应用程序 并且在整个开发周期中一直使用 Git 现在 我想构建并发布实验性功能 供人们尝试和安装 同时仍将原始的 稳定的应用程序安装在他们的设备上 现在 这意味着我需要使用不同的包名称 这会更改开发项目中的一
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • Numpy - ImportError:无法导入名称 _distributor_init

    我一直在使用matplotlib from python和spyder ide为出版物创建一些数据 它总是有效 但即使在使用 Linux 多年之后 整个事情对我来说仍然是一个黑匣子 昨天我尝试运行另一个应用程序 它抱怨说numpy and
  • 空对象引用上的“boolean java.lang.Class.isInterface()”

    我在 Android 13 上遇到此崩溃 代码如下 Caused by java lang NullPointerException Attempt to invoke virtual method boolean java lang Cl
  • InvalidArgument=值“0”对于“SelectedIndex”无效

    我正在 NET 4 0 中开发 Windows 窗体应用程序 当我将数据绑定到BindingSource 其中一个ComboBox已绑定 我得到以下异常 注意 只有当我让调试器在抛出异常 未处理或已处理 时停止时 我才会得到它 因此 异常在
  • 旋转时碎片不会被破坏

    我有一个以编程方式添加的片段 然而 我发现在旋转之后 会创建一个新片段 但旧片段仍然存在 尽管没有显示 我假设片段会随着旋转活动而被销毁 但这里的情况并非如此 是什么导致我的片段被保留 未被破坏 请注意 我没有设置 setRetainIns
  • 从 'System.Int32' 到 'System.Nullable`1[[System.Int32, mscorlib]] 的强制转换无效

    Type t typeof int will get this dynamically object val 5 will get this dynamically object nVal Convert ChangeType val t
  • 如何一次刷新Postgresql 9.3中的所有物化视图?

    我正在将一堆数据加载到 PostgresQL 9 3 数据库中 然后我想刷新依赖于更新表的所有物化视图 有没有一种方法可以自动执行此操作 而不是逐一浏览每个视图并刷新它们 我知道 Oracle 可以很容易地做到这一点 但在梳理 Postgr
  • 使用单选按钮组打破键盘焦点

    这看起来很简单 但这对我来说有点令人头疼 给出以下 有效的 xhtml 过渡 代码
  • Angular CLI 将 font-awesome 字体文件输出到 dist root

    你一定要吗eject你的 angular cli 并覆盖 webpack 配置以放置font awesome字体放入 asset fonts 文件夹中 我有这个 angular cli 并且我以这种方式将 font awesome 包含在我
  • Python 特征向量

    eigenvalues eigenvectors linalg eig K 我怎样才能只打印特征向量len K 所以如果有K 2x2矩阵 我得到4个特征向量 如果有的话我怎样才能只打印其中2个len K 2 非常感谢 您将得到两个长度为 2
  • LLVM环境变量在哪里或者LLVM环境是如何配置的?

    作为上下文 我有一台 Mac 我在工作中使用它使用各种自定义构建脚本进行开发 我现在尝试使用同一台机器来玩一些个人 Xcode 项目 第一步 我在 Xcode 11 3 1 中创建一个新的 Single View App 项目 并尝试在我连
  • C# 中的内存使用情况

    我有一个在 C 中使用线程的程序 有没有办法以编程方式了解应用程序的内存使用情况 我想将线程的产生限制为 10 MB 内存 我该怎么做 如果您想要整个正在运行的进程的内存而不是每个线程的内存 那么 get the current proce
  • 用于出版质量图的 Python Pylab pcolor 选项

    我正在尝试使用 DFT 离散傅立叶变换 图pcolor在Python中 我之前一直使用 Mathematica 8 0 来执行此操作 但我发现 Mathematica 8 0 中的颜色条与我尝试表示的数据具有不良的一对一相关性 例如 这是我
  • Java:使用多个 DatagramSocket 接收 UDP 数据报包

    我正在尝试实现一种将 UDP 数据包发送到多个接收者的方法 我认为这应该是可行的设置setReuseAddress true 在接收 DatagramSocket 实例上 我的问题是 在某些情况下 我需要限制与本地计算机的通信 因此限制本地
  • 如何将RGB值转换为色温?

    如何获取以 RGB 值 例如 0 255 之间的三个坐标 表示的颜色并从中生成一个色温 https en wikipedia org wiki Color temperature在开尔文 或泥潭 I see 这个问题 https stack
  • for 循环:C++ 和 python

    我了解如何使用 for 循环 for x 0 x lt 5 x some code 在 C 中 但是 for 循环怎么样 for x in y 至少存在于 python 中 最接近的等效项是基于范围的 for 循环 例如 auto y 0
  • DreamHost 上的 Rails 3?

    我想在 dreamhost 上部署一个小型 Rails 3 应用程序 仅用于测试目的 没什么大不了的 我想知道是否有人已经这样做了 请选择以下选项之一 我做到了 非常简单 方法如下 虽然我没有尝试过 但应该很容易 方法如下 这很复杂 但这应
  • 使用具有根 UITabBarController 的故事板将 ManagedObjectContext 传递给视图控制器

    使用故事板 您无法轻松访问 appDelegate 中的第一个视图控制器 尽管一旦您这样做了prepareForSegue可以轻松地将 ManagedObjectContext 传递到导航堆栈中 我决定为每个需要核心数据访问的视图控制器 或
  • 更新到 OSX 10.9.5 后如何更改 Java 应用程序的签名方式

    刚刚从 OSX 10 9 4 更新到 10 9 5 看起来我必须更改更新后签署 Java 应用程序的方式 因为我现在在签名后得到此输出 export CODESIGN ALLOCATE Applications Xcode app Cont
  • Javascript:向函数原型添加方法

    有没有更短的写法 var controller function constructor controller prototype function1 function Prototype method1 controller protot
  • 我可以/应该编辑 R.java 文件吗?如果是这样,怎么办?

    因此 我正在 Eclipse for Android 4 0 中编写一个简单的计算器 并尝试简化我的代码并使其尽可能简单 我试图清理的地方是我的 findViewById 的 因为我有按钮 0 9 来实例化 所以我有一个十行长的代码块 如下