如果我使用从TimePickerDialog
返回的上下文初始化getBaseContext()
而不是使用this
,则在尝试显示带有时间选择器的Dialog时会出现此问题参考当前的活动。
所以这段代码很好:
@Override
protected Dialog onCreateDialog( int id )
{
return new TimePickerDialog( this , mTimeSetListener, hr, min, false);
}
但此代码抛出异常
protected Dialog onCreateDialog( int id )
{
return new TimePickerDialog( getBaseContext(), mTimeSetListener, hr, min, false);
}
如果我想要显示Toast,那么我会使用
Toast.makeText( getBaseContext() , ...
这也有效。
我的问题是我会认为我希望Dialog显示的上下文是baseContext
所以为什么Toast使用这个但是Dialog需要引用“this”,即当前活动,因为我认为他们的工作方式非常相似?
答案 0 :(得分:1)
除非您知道自己在做什么,并且有一个非常具体和具体的理由来使用它,否则不要使用getBaseContext()
。
Toast
您不需要它,而Dialog
则不需要它。无论您使用Activity
为Context
创建Toasts
和Dialogs
都是非常好this
,所以只需使用{{1}}。