我正在Activity4.java中工作,代码为:
public class Activity4 extends Activity {
Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_4);
spinner=findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if(Activity4.this==adapterView.getContext())
Toast.makeText(adapterView.getContext(),adapterView.getSelectedItem().toString(),Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
}
我在上面的代码中使用adapterView.getContext()作为上下文。但是,即使我将其替换为
之类的getApplicationContext(),Toast.makeText(getApplicationContext(),adapterView.getSelectedItem()。toString(),Toast.LENGTH_LONG).show();
或者如果我这样写getBaseContext(),
Toast.makeText(getBaseContext(),adapterView.getSelectedItem().toString(),Toast.LENGTH_LONG).show();
烤面包看起来很好用。为什么会这样?
答案 0 :(得分:0)
这是Toast.java中makeText()方法的实现:
/**
* Make a standard toast that just contains a text view.
*
* @param context The context to use. Usually your {@link android.app.Application}
* or {@link android.app.Activity} object.
* @param text The text to show. Can be formatted text.
* @param duration How long to display the message. Either {@link #LENGTH_SHORT} or
* {@link #LENGTH_LONG}
*
*/
public static Toast makeText(Context context, CharSequence text, @Duration int duration) {
return makeText(context, null, text, duration);
}
如您在@param context
的注释中所看到的,它说明通常通常是应用程序的上下文或活动的上下文。
但是文档:
此方法采用三个参数:应用程序上下文,文本 消息,以及烤面包的持续时间
声明上下文必须是应用程序上下文。
好吧,吐司似乎只需要一个上下文。
如果可能,我们必须使用应用程序上下文以避免意外结果。
虽然我还没见过。