我使用的是一种直观的,但也许是非正统的捷径,我只是想知道它是否会导致问题,形式是不好,还是有不同的,更容易接受的方式。
快捷方式是:在一个期望int是R.drawable常量的函数中,我有时使用0作为传递“null”的等价物。
这是我如何使用它的一种模板:
int someDrawable = isSomeCondition() ? R.drawable.somedrawable_identifier : 0;
mHandler.post(new UpdateSomeUI(someDrawable));
//and, elsewhere in the application,
private class UpdateSomeUI implements Runnable {
private final int someDrawable;
public UpdateSomeUI(int someDrawable) {
this.someDrawable = someDrawable;
}
public void run() {
mSomeImageView.setImageResource(someDrawable);
}
}
//and, elsewhere in the application,
private class UpdateSomeUI implements Runnable {
private final int someDrawable;
public UpdateSomeUI(int someDrawable) {
this.someDrawable = someDrawable;
}
public void run() {
mSomeImageView.setImageResource(someDrawable);
}
}
它似乎有效 - 也就是说,到目前为止,它一直在做我想要的,到目前为止,我已经观察到没有诸如崩溃或在设备内创建量子奇点的不利影响。
这样做安全吗? 这是不好的形式? 我知道某些官方整数值在这种情况下会被识别为“null”,但是空洞的。有谁知道这样的价值是否存在?
编辑: 我意识到标签“r”并不是指我想要的那个。但是,标签“android.R”似乎并不存在。我想我现在要删除标签。
答案 0 :(得分:4)
没有表示“null”的资源,并且通过传入无效的资源ID,会在内部抛出并处理异常(当调用getDrawable(0)
时)。正确的做法是只在实际存在有效的drawable时调用UpdateSomeUI(someDrawable)
。
像
这样的东西//in a method somewhere:
if(isSomeCondition()) {
mHandler.post(new UpdateSomeUI(R.drawable.somedrawable_identifier));
}
这样做有什么问题?
答案 1 :(得分:1)
在android文档中找到了有关资源ID,子节常量的信息,希望对您有所帮助。
常量 ID_NULL 在API级别29中添加 静态值ID_NULL:Int 空资源ID。这表示无效的资源ID,当找不到资源或XML值设置为@null时,系统将返回该ID。
值:0