当前位置: 首页 > 知识库问答 >
问题:

Android(Java):如何使用LayoutInflater.Inflate()创建对话框?

仇征
2023-03-14
public class MyDialog extends Dialog implements View.OnClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LayoutInflater inflater = LayoutInflater.from(getContext());
        View view               = inflater.inflate(R.layout.my_dialog, null); 
        // ________________ How to replace that null? ___________________^

        setContentView(view);
    }
}
MyDialog.java:42: error: ERADICATE_PARAMETER_NOT_NULLABLE
  `LayoutInflater.inflate(...)` needs a non-null value in parameter 2 but argument `null` can be null. (Origin: null constant at line 42).
  41.           LayoutInflater inflater = LayoutInflater.from(getContext());
  42. >         View view               = inflater.inflate(R.layout.dialog_unlock, null);

有什么想法吗?提前感谢!

解决方案

public class MyDialog extends Dialog implements View.OnClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_dialog);

        Button myBtn         = findViewById(R.id.my_btn);
        EditText myTextField = findViewById(R.id.my_et);

        View.OnClickListener onClickMyBtn = v -> {
            String value = myTextField.getText().toString();
            Log.d("MyDialog", String.format("My value: %s", value));
            dismiss();
        };
        myBtn.setOnClickListener(onClickMyBtn);
    }
}

共有1个答案

赵征
2023-03-14

用这个

setContentView(R.layout.my_dialog);

而不是这个

LayoutInflater inflater = LayoutInflater.from(getContext());
View view  = inflater.inflate(R.layout.my_dialog, null);
setContentView(view);

示例代码

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MyDialog extends Dialog implements View.OnClickListener {


    public MyDialog(Context context) {
        super(context);
    }

    Button myBtn;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_dialog);

        myBtn = findViewById(R.id.my_btn);
        myBtn.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        if (view == myBtn) {
            Toast.makeText(view.getContext(), "clicked", Toast.LENGTH_SHORT).show();
        }
    }
}
MyDialog myDialog = new MyDialog(this);
myDialog.show();
 类似资料:
  • my_custom_toast.xml MainActivity.java 几个音符 换句话说,这段代码将布局膨胀(并嵌入)到它自己的一个成员中,即LinearLayout(check)。这通过将xml文件膨胀为第二个LinearLayout来复制LinearLayout。

  • 如何使用UI设计器创建对话框?我尝试通过创建新的Form来创建对话框,并将其UIID更改为对话框和show Form(“对话框名称”,空);它用全屏显示表单 我再次使用以下语句Dialog dlg=(Dialog)createContainer(fetchResourceFile(),“dialogName”);但它显示了以下错误com。代号1。用户界面。无法将窗体强制转换为com。代号1。用户界

  • 问题内容: 创建对话框的最简单方法是: 在一个窗口中,我提供用于信封寻址的数据,还从尺寸列表中设置字体类型 当单击“确定”时,在同一窗口或下一个窗口中,我将预览到给定名称和使用所选字体大小后的信封外观 它的外观应类似于: 替代文字http://img15.imageshack.us/img15/7355/lab10aa.gif 我应该使用Jdialog吗?还是JOptionPane就足够了?下一步

  • 问题内容: 我在JFrame上有一个按钮,当单击该按钮时,我希望对话框弹出并带有多个文本区域供用户输入。我一直在四处寻找解决方法,但是我一直感到困惑。有人可以帮忙吗? 问题答案: 如果您不需要太多自定义行为,则JOptionPane可以节省大量时间。它负责OK / Cancel选项的放置和本地化,并且是一种无需定义自己的类即可显示自定义对话框的快捷方法。大多数情况下,JOptionPane中的“

  • 问题内容: 我需要在JavaFX中创建一个对话框。我知道我可以通过修改模式,所有者和可调整大小的属性来使舞台表现得像对话框。 但是,如何从舞台窗口中隐藏“最小化”和“最大化”按钮?典型的对话框只有“关闭”按钮。 问题答案: 在Windows 7下,在显示窗口之前初始化为StageStyle.UTILITY将创建一个仅具有关闭按钮而没有最小化或最大化按钮的窗口: 如果您需要一整套基本的JavaFX对

  • 我需要用JavaFX创建一个对话框。我知道我可以通过修改modal、owner和resizable属性使Stage的行为像一个对话框。 但是我如何从舞台窗口隐藏“最小化”和“最大化”按钮呢?典型的对话框只有“关闭”按钮。