我一直在使用几个小部件但是当我运行以下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();
}
});
}
}
答案 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
要完成答案,我还将添加您需要在不扩展Activity
或Fragment
的类(例如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,制作意图等。