提问者:小点点

为什么我的祝酒词适用于这么多不同的背景?


我在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. make Text(获取Application Context(),适配器View.get S对Item().to String(),Toast.LENGTH_LONG).show();

或者如果我这样写getBaseContext(),

Toast.makeText(getBaseContext(),adapterView.getSelectedItem().toString(),Toast.LENGTH_LONG).show();

烤面包似乎效果不错。为什么会这样?


共1个答案

匿名用户

这是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);
}

正如您在@参数context的注释中看到的那样,它通常是应用程序的上下文或活动的上下文。

但是留档:

此方法采用三个参数:应用程序Context、文本消息和toast的持续时间

声明上下文必须是应用程序上下文。

嗯,看来Toast只需要一个上下文。
如果可能,我们必须使用应用程序上下文来避免意外结果。
虽然我还没有看到任何。