Java 如何为onclick侦听器获取正确的上下文?
当用户使用以下代码单击LinearLayout时,我尝试打开一个自定义对话框:Java 如何为onclick侦听器获取正确的上下文?,java,android,Java,Android,当用户使用以下代码单击LinearLayout时,我尝试打开一个自定义对话框: each_pays = (TextView) findViewById(R.id.each_pays); each_pays_vert.setOnClickListener(new LinearLayout.OnClickListener() { @Override public void onClick(View _v) { // custo
each_pays = (TextView) findViewById(R.id.each_pays);
each_pays_vert.setOnClickListener(new LinearLayout.OnClickListener() {
@Override
public void onClick(View _v) {
// custom dialog
final Dialog multiples_dialog = new Dialog(this);
multiples_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
multiples_dialog.setContentView(R.layout.multiples_dialog);
Button closeMultiplesDialogButton = (Button) multiples_dialog.findViewById(R.id.close_multiples_button);
// if button is clicked, close the custom dialog
closeMultiplesDialogButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
multiples_dialog.dismiss();
}
});
multiples_dialog.show();
}
});
例如,当从选项菜单项单击运行时,自定义对话框代码etc在其他地方工作,但当我在此处尝试时,会出现编译时错误:303、71错误:不兼容类型:无法将意图转换为上下文
错误在以下行中:
final Dialog multiples_dialog = new Dialog(this);
如果我用getApplicationContext替换它,就会出现运行时崩溃
我很困惑。您的声明在一个对象声明中。因此,在本例中,这不是您的活动,而是OnClickListener 三种解决方案: 例如,使用final Dialog multiples\u Dialog=new dialogmain activity.this引用活动 将显示对话框的代码放在活动中的单独函数中,并在OnClickListener中调用该函数。 保存对要在OnClickListener中使用的上下文的引用,将其标记为final。此选项的外观如下所示: " 注意:应用程序上下文不能用于任何UI操作。这就是使用getApplicationContext时崩溃的原因。您可以使用以下命令从视图中获取上下文: 我使用了第一个选项MainActivity.this作为快速修复,但一旦我有机会重新编写一些代码,我可能会通过您的第二个建议来实现,因为这看起来更“正确”,而不是快速修复。
each_pays = (TextView) findViewById(R.id.each_pays);
final Context ctx = this;
each_pays_vert.setOnClickListener(new LinearLayout.OnClickListener() {
@Override
public void onClick(View _v) {
// custom dialog
final Dialog multiples_dialog = new Dialog(ctx);
...
final Dialog multiples_dialog = new Dialog(_v.getContext());