当用户使用以下代码点击LinearLayout
时,我正在尝试打开自定义对话框:
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();
}
});
自定义对话框代码等在别处工作(例如,从选项菜单项单击运行时),但是当我在这里尝试时,我得到编译时错误Error:(303, 71) error: incompatible types: Intent cannot be converted to Context
。
错误在于:
final Dialog multiples_dialog = new Dialog(this);
如果我将this
替换为getApplicationContext()
,我会遇到运行时崩溃。
我很困惑。
答案 0 :(得分:1)
您的声明属于对象声明(OnClickListener)。因此this
在这种情况下不是您的活动,而是OnClickListener。
可以解决的三个选项:
final Dialog multiples_dialog = new Dialog(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);
...
注意:应用程序上下文不能用于任何UI操作。这是使用getApplicationContext()时崩溃的原因。
答案 1 :(得分:0)
您可以使用getContext()
从Context
获得View
:
final Dialog multiples_dialog = new Dialog(_v.getContext());