1

我通常创建initialize()用于设置点击监听器的函数和函数,然后我从 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);
                }
           });
        }   
    }
}
4

3 回答 3

6

一旦setContentView()被调用,只要您在正确的布局中查看并且视图存在于该布局中,您将永远不会获得空视图。

如果您通过传递错误的 ID 来寻找视图,或者在不同的布局中寻找它,例如对话框或其他东西,您只会得到一个空值。

因此,如果您设计好您的应用程序并在编码时牢记这一切,您就不需要这些空值检查。我个人在 2 年多的 Android 开发工作中从未使用过它们,因此也没有遇到任何问题。

于 2013-05-08T09:33:07.387 回答
1

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

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

于 2013-05-08T09:53:41.877 回答
0

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

因此,如果您确定自己已正确完成所有操作,则无需检查。但是如果有任何错误的机会,您可以使用它进行测试

喜欢

if(buttton == null)
   show a warning
else
   do work
于 2013-05-08T09:33:20.493 回答