【问题标题】:custom dialog not showing up自定义对话框未显示
【发布时间】:2019-12-19 06:59:18
【问题描述】:

我正在尝试创建一个自定义对话框,但它没有显示出来。

这是我点击按钮显示对话框时的样子

这是我的对话框类和 mainActivity


这是我的主要活动

public class MainActivity extends AppCompatActivity {
    Button click;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        click = findViewById(R.id.click);
        click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                AddUserDialog dialog = new AddUserDialog();
                dialog.show(getSupportFragmentManager(), "MyCustomDialog");

            }
        });
    }



}

这是我的 AddUserDialog


public class AddUserDialog extends DialogFragment {

    public Button add;
    public EditText userName, UserEmail, userPhone;
   /* public ImageView addPhoto;*/
    public TextView cancel;


    @NonNull
    protected View onCreate(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  

        View v = inflater.inflate(R.layout.add_user_dialog, container, false);

        add = v.findViewById(R.id.button);
        cancel = v.findViewById(R.id.cancel_dialog);
        userName = v.findViewById(R.id.name);
        UserEmail = v.findViewById(R.id.email);
        userPhone = v.findViewById(R.id.phone);
       /* addPhoto = v.findViewById(R.id.addPhoto);
*/
        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getDialog().dismiss();
            }
        });
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Snackbar.make(v, "User added", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
                getDialog().dismiss();
            }
        });

        return v;

    }


}

我是否在我的场景中遗漏了什么,请告诉我,谢谢。

【问题讨论】:

  • 你有什么错误吗?
  • AddUserDialog 类中的方法名称应该是 onCreateView(),而不是 onCreate()。它也应该是public,而不是protected。使用 @Override 注释可能会告诉你你搞错了。
  • 天啊,我是怎么做到的!!!!谢谢
  • 这些天我注意力不集中:(

标签: android android-layout android-fragments dialog


【解决方案1】:

AddUserDialog 更改为

public class AddUserDialog extends DialogFragment {

    public Button add;
    public EditText userName, UserEmail, userPhone;
    /* public ImageView addPhoto;*/
    public TextView cancel;

    static AddUserDialog newInstance() {
        AddUserDialog f = new AddUserDialog();
        return f;
    }

    @NonNull
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.add_user_dialog, container, false);

        add = v.findViewById(R.id.button);
        cancel = v.findViewById(R.id.cancel_dialog);
        userName = v.findViewById(R.id.name);
        UserEmail = v.findViewById(R.id.email);
        userPhone = v.findViewById(R.id.phone);
        /* addPhoto = v.findViewById(R.id.addPhoto);
         */
        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getDialog().dismiss();
            }
        });
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Snackbar.make(v, "User added", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
                getDialog().dismiss();
            }
        });

        return v;
    }
}

并调用对话框

AddUserDialog dialog = AddUserDialog.newInstance();
dialog.show(getSupportFragmentManager(), "MyCustomDialog");

【讨论】:

    【解决方案2】:

    它对我有用,使用 onCreateDialog

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        // Get the layout inflater
        LayoutInflater inflater = getActivity().getLayoutInflater();
       View dialog = inflater.inflate(R.layout.date_picker_dialog, null);
    
        ////your code here 
        pickerDay = dialog.findViewById(R.id.picker_day);
        pickerMonth = dialog.findViewById(R.id.picker_month);
        pickerYear = dialog.findViewById(R.id.picker_year);
        //////////
    
        builder.setView(dialog);
        return builder.create();
    }
    

    【讨论】:

      【解决方案3】:

      在您的 OnClick() 中。用这个

      AddUserDialo userDialog = new AddUserDialo ( MainActivity.this );
                      userdDialog.getWindow ().setBackgroundDrawable ( new ColorDrawable ( Color.TRANSPARENT ) );
                      userdDialog.show ();
      

      【讨论】:

      • 错误出现在(AddUserDialog 类)我使用 protected onCreate 而不是 public onCreateView
      猜你喜欢
      • 2011-06-17
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      相关资源
      最近更新 更多