当按下此按钮时,我想显示一个Toast。但代码不起作用。

5
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    Button btn = (Button) findViewById(R.id.button1);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            EditText text = (EditText)findViewById(R.id.editText1);
            EditText text1 = (EditText)findViewById(R.id.editText2);
            String userid = text.getText().toString();
            String pass = text1.getText().toString();
        Toast.makeText(getBaseContext(),"Entered"+userid+"and password entered is"+pass,Toast.LENGTH_SHORT).show();
        }

    });

}

代码执行成功,但是按钮被按下时没有任何反应。当我在Eclipse中聚焦于该行时,它会显示以下内容。
"The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (new 
 View.OnClickListener(){}, String, int)"

请告诉我,我需要做什么才能使它正常工作?

1
请使用MainActivity.this代替getBaseContext()。 - Pragnani
你在看到那个错误时没有使用 getBaseContext(),而是使用了 this... 你应该尝试保存或清理你的代码。 - Sam
3个回答

18

你需要将当前上下文作为第一个参数传递(而不是使用getBaseContext())。在您的情况下,这个上下文是MainActivity.this

Toast.makeText(MainActivity.this,"Entered"+userid+"and password entered is"+pass,Toast.LENGTH_SHORT).show();

运行得非常好!谢谢! 请问“上下文”实际上是什么意思?我对Android应用程序开发非常新手。如果我知道它是什么,我相信我就不会再犯这样的错误了。 - tmj

2

这是因为代码中的getBaseContext()引用了点击监听器。你需要引用你的活动。你应该更改Toast消息中上下文的引用为View.getContext()(如果在子视图内使用上下文)或者this


1
getBaseContext() 不能引用 OnClickListener,这只是一个误导。 - Sam
他之所以会得到“Toast类型中的makeText(Context,CharSequence,int)方法对参数(new View.OnClickListener() {},String,int)不适用”的打印输出,是因为传入的getBaseContext参数正如错误所述是View.OnClickListener。 - Jay Snayder
如果你能重现那个错误,我会非常印象深刻。该错误很可能是从 Toast.makeText(this, ... 遗留下来的,编译器没有刷新/删除该错误。此外,我从未听说过 Activity.getContext(),这是一个打字错误吗?如果不是,你能提供它的文档链接吗? - Sam
啊,是的。如果他在Activity中通过View工作,那么这将是一个View。但由于poitroae已经解决了问题并接受了答案,在这个问题中我不需要继续了。 - Jay Snayder

0
Toast.makeText(getApplicationContext(),"Entered"+userid+"and password entered is"+pass,Toast.LENGTH_SHORT).show();

或者

Toast.makeText(MainActivity.this,"Entered"+userid+"and password entered is"+pass,Toast.LENGTH_SHORT).show();

方法语法

public static Toast makeText (Context context, CharSequence text, int duration);

要使用的上下文。通常是您的Application或Activity对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接