首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以/应该编辑R.java文件吗?如果是这样的话,是怎么做的?

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

Stack Overflow用户
提问于 2011-12-04 19:01:24
回答 6查看 7.2K关注 0票数 2

因此,我正在为Android 4.0在Eclipse中编写一个简单的计算器,并尝试将我的代码流水线化,使其尽可能简单。我要清理的地方是我的findViewById(),因为我有按钮0-9来实例化,所以我有一个十行长的代码块,看起来像这样:

代码语言:javascript
复制
b0 = (Button) findViewById(R.id.b0);
b1 = (Button) findViewById(R.id.b1);
...
b9 = (Button) findViewById(R.id.b9);

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

代码语言:javascript
复制
private Button[] numberPad = {b0,b1,b2,b3,b4,b5,b6,b7,b8,b9};

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

代码语言:javascript
复制
private static final int[] numberPad = {b0,b1,b2,b3,b4,b5,b6,b7,b8,b9};

所以我可以使用这个循环将十行Button实例减少到两行:

代码语言:javascript
复制
for(int i = 0; i < numberPad.length; i++)
    numberPad[i] = (Button) findViewById(R.id.numberPad[i]);

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-12-04 19:17:00

如前所述,R文件是(或应该)在每次构建时自动重新生成的。你应该尝试一些依赖注入框架(Roboguice对于Android编程很有效)来清理处理视图的问题。例如,代替(取自项目文档的代码):

代码语言:javascript
复制
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 ); 
}} 

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

代码语言:javascript
复制
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 ); 
} } 

这不仅有助于保持视图管理的整洁和到位,而且在测试时也非常有用。

票数 2
EN

Stack Overflow用户

发布于 2011-12-04 19:05:08

每次构建时都会重新创建R.java文件。

票数 1
EN

Stack Overflow用户

发布于 2011-12-04 19:04:52

因为R.java是自动生成的,所以我认为编辑它是一个非常糟糕的主意。

有时在使用Eclipse时,我会收到一些关于R.java的奇怪错误,为了解决这个问题,我只是清理了项目,然后一切都恢复正常了。

有关资源的更多信息,请查看此链接:http://developer.android.com/guide/topics/resources/accessing-resources.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8374838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档