在设置onClickListener之前检查View == null

时间:2013-05-08 09:25:45

标签: android

我通常创建initialize()函数和函数来设置on-click监听器,然后我从Activity的onCreate()调用这些函数。当我在函数中调用someView.setOnClickListener(...)时,我应该检查是否someView == null?我知道,它!= null,但我需要一个关于编码风格的建议。哪种做法最好?
这是一个例子:

...
public class SomeActivity extends Activity
{
    private ImageButton someButton;
    private Intent someIntent;

    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        setContentView(R.layout.add_alarm);        
        initialize();
        setSomeButtonHandler();
    }

    public void initialize()
    {
        someButton = (ImageButton) findViewById(R.id.someButton);
    }

    public void setSomeButtonHandler()
    {
        if(someButton != null) //Should I check this?
        {
            someIntent = new Intent(SomeActivity.this, SomeButtonActivity.class);
            someButton.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View v)
                {
                    startActivity(someIntent);
                }
           });
        }   
    }
}

3 个答案:

答案 0 :(得分:5)

调用setContentView()后,如果您正在查看正确的布局并且该布局中存在视图,则永远不会获得空视图。

如果您通过传递错误的ID来查找View,或者在不同的布局中查找它,例如对话框或其他内容,则只会获得null。

因此,如果您很好地设计应用程序并在编码时记住所有这些,则不应该需要这些空检查。我个人从未使用它们超过两年在Android上工作,因此没有任何问题。

答案 1 :(得分:1)

不,你不需要这种健全性检查。

如果findViewById返回null,则最好使应用程序崩溃,因为这意味着您没有使用正确的XML或ID。在调试中崩溃时解决它,并且不会再次为null。

答案 2 :(得分:0)

您可以使用空值检查进行测试。 findViewByID方法在找不到任何视图时返回null。例如,如果您使用错误的ID或任何机会尝试在setContentView之前访问该孩子。

所以如果你确定你已经做好了一切,那么就不需要检查了。但是如果有任何错误的机会,你可以用它进行测试

if(buttton == null)
   show a warning
else
   do work