Android - 使用int值0作为“null” - 等同于R.drawable

时间:2011-02-28 20:32:03

标签: android

我使用的是一种直观的,但也许是非正统的捷径,我只是想知道它是否会导致问题,形式是不好,还是有不同的,更容易接受的方式。

快捷方式是:在一个期望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”似乎并不存在。我想我现在要删除标签。

2 个答案:

答案 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,子节常量的信息,希望对您有所帮助。

Resource ID > Constants

常量 ID_NULL 在API级别29中添加 静态值ID_NULL:Int 空资源ID。这表示无效的资源ID,当找不到资源或XML值设置为@null时,系统将返回该ID。

值:0