我通常创建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);
}
});
}
}
}
答案 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