Android中的Toasts

时间:2015-08-24 14:57:13

标签: android android-toast

我一直在使用几个小部件但是当我运行以下Activity时没有任何反应。

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


    Button bt =(Button)findViewById(R.id.button);
    bt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Toast.makeText(getBaseContext(), "Button is clicked", Toast.LENGTH_SHORT).show();
        }
    });
}

}

2 个答案:

答案 0 :(得分:3)

你必须得到Activity上下文,所以替换它:

Toast.makeText(getBaseContext(), "Button is clicked", Toast.LENGTH_SHORT).show();

用这个:

Toast.makeText(NameOfYourActivity.this, "Button is clicked", Toast.LENGTH_SHORT).show();

请注意,您需要更改NameOfYourActivity.this以获取活动名称,该名称未在您的代码段中显示。

修改

如果您直接在“活动”上下文中创建吐司而不在其他内容中创建吐司(例如this上下文),则也可以仅使用NameOfYourActivity.this代替OnClickListener

如果您使用片段getActivity()而不是NameOfYourActivity.this

编辑2

要完成答案,我还将添加您需要在不扩展ActivityFragment的类(例如BaseAdapter或模型类)中获取上下文的情况

在这种情况下,您必须通过构造函数传递上下文并将其用作全局变量。如果不需要,不要使用静态上下文。

public class MyClass {
    private Context context;

    public MyClass(Context context) {
        this.context = context;
    }

    public void showToastFromHere() {
        Toast.makeText(context, "Method in MyClass.class", Toast.LENGTH_SHORT).show();
    }
}

并在活动中调用该方法创建该类的实例:

MyClass toastClass = new MyClass(NameOfYourActivity.this);
toastClass.showToastFromHere();

答案 1 :(得分:0)

尝试改变这个:

Toast.makeText(getBaseContext(), "Button is clicked", Toast.LENGTH_SHORT).show();

到此:

Toast.makeText(getApplicationContext(), "Button is clicked", Toast.LENGTH_SHORT).show();

我认为你必须使用你的应用程序上下文来显示Toast,制作意图等。