Toast.makeText(getApplicationContext(),“String”,Toast.LENGTH_LONG); ==>这里getApplicationContext()不能改为“this”?

时间:2012-02-04 06:19:41

标签: android this toast android-context

首先是Toast.makeText()的格式:

public static Toast makeText (Context context, CharSequence text, int duration) 第一个参数是 上下文 ,函数 getApplicationContext() 也返回当前上下文,一切正常,但是IMO, getApplicationContext() 也可以替换为此,如下所示:

public class ContextMenuResourcesActivity extends Activity {
    /** Called when the activity is first created. */

    private Button b1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    b1 = (Button)findViewById(R.id.button1);
    final int l = Toast.LENGTH_LONG;
    final String s1 = "some string";
    b1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Toast t1 = Toast.makeText(this, s1, l);
                t1.show();
            }
        });
    }
}

IMO this代表类ContextMenuResourcesActivity,它扩展了Context,因此它可以替换第一个需要 上下文的参数,但我失败了,谁能解释为什么?

3 个答案:

答案 0 :(得分:5)

创建新的OnClickListener时,您将创建一个实现特定接口的匿名类。因此,this并未引用Activity,因为您实际上是在另一个对象中。

以下是有关该主题的更多信息Anonymous classes vs delegates

答案 1 :(得分:0)

在这种情况下,这表示OnClickListener实例,要创建视图或其他UI内容,您需要获取上下文,这可以通过以下不同方法来完成:

getApplicationContext();
ContextMenuResourcesActivity.this;
v.getContext();

答案 2 :(得分:-1)

new OnClickListner()是一个实现onclick接口的匿名类,它指的是匿名类的实例。而是使用" Your_Activity_Name.this"引用您当前活动的背景。