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

android-处理dialogFragment按钮点击

秦伯寅
2023-03-14
public class CompanyNotConnectedToSRDialog extends DialogFragment {

    public static final String TAG = CompanyNotConnectedToSRDialog.class.getSimpleName();

    private NotConnectedDialogListener mNotConnectedDialogListener;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity(), R.style.DefaultAlertDialogTheme)
                .setTitle("Register")
                .setMessage("Do you really want to register?")
                .setNeutralButton("Skip", (dialog1, which) -> {
                    mNotConnectedDialogListener.onSkipBtnNotConnectedDialogPressed();
                })
                .setNegativeButton("Cancel", null)
                .setPositiveButton("Register", (dialog12, which) -> {
                    mNotConnectedDialogListener.onSendBtnNotConnectedDialogPressed();
                })
                .create();
    }


    public interface NotConnectedDialogListener {
        void onSkipBtnNotConnectedDialogPressed();
        void onSendBtnNotConnectedDialogPressed();
    }

    public void setListener(NotConnectedDialogListener listener) {
        this.mNotConnectedDialogListener = listener;
    }
if (mNotConnectedDialog == null) {
            mNotConnectedDialog = new CompanyNotConnectedToSRDialog();
            mNotConnectedDialog.setListener(this);
            mNotConnectedDialog.show(getActivity().getFragmentManager(), CompanyNotConnectedToSRDialog.TAG);
        } else {
            mNotConnectedDialog.show(mActivity.getFragmentManager(), CompanyNotConnectedToSRDialog.TAG);
            mNotConnectedDialog.setListener(this);
        }
java.lang.NullPointerException: Attempt to invoke interface method 'void com.myapp.ui.object.create.dialogs.CompanyNotConnectedToSRDialog$NotConnectedDialogListener.onSendBtnNotConnectedDialogPressed()' on a null object reference

at com.myapp.ui.object.create.dialogs.CompanyNotConnectedToSRDialog.lambda$onCreateDialog$1(CompanyNotConnectedToSRDialog.java:31)

如果这个解决方案是错误的,如何处理这些点击和设置监听器?

PS:请不要告诉我android:configchanges

共有1个答案

路伟
2023-03-14

是的,在方向改变后,您的侦听器是空的。对活动进行回调是最简单的:

public static class DialogFragmentA extends DialogFragment {

    // Container Activity must implement this interface
    public interface NotConnectedDialogListener {
        public void onX();
    }

    NotConnectedDialogListener mListener;
    ...
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (NotConnectedDialogListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement NotConnectedDialogListener");
        }
    }
    ...
}

现在,您可以在任何位置的对话框中调用mlistener.onx等,也可以在方向改变后调用。您的容器活动必须实现接口,并将接收方法调用。

https://developer.android.com/guide/components/fragments.html#eventcallbacks

 类似资料:
  • 为了保持一致,我将列出它们: > 在活动中拥有类的成员,并将其分配给将在活动方法中处理逻辑的实例。 在'on Create'活动方法中创建'on ClickListener',并使用setOnClickListener将其分配给按钮 附言。我试着用谷歌搜索这个主题,但我找到的唯一的东西是描述“如何”做到这一点,而不是为什么它是好是坏。

  • 问题内容: 我在非Java和非Android领域拥有扎实的经验,正在学习Android。 我对不同领域有很多困惑,其中之一就是如何处理按钮单击。至少有4种方式(!!!),此处简要列出 为了保持一致性,我将列出它们: 在活动中具有该类的成员,并将其分配给将处理活动方法中的逻辑的实例。 在“ onCreate”活动方法中创建“ onClickListener”,然后使用setOnClickListen

  • 我需要一些帮助我的对话问题。我从自定义视图创建了dialogFragment,并设置了肯定/否定按钮,如下所示: 我更喜欢那种样式的按钮,在这种情况下我该如何使用它。

  • 帮助处理通过适配器在ListView中设置的按钮上的单击。 我重新阅读了很多网站,都考虑过类似的任务,但都无法弄清楚并在我的代码中实现,希望大家能帮助我。提前谢谢你。

  • 本文向大家介绍java处理按钮点击事件的方法,包括了java处理按钮点击事件的方法的使用技巧和注意事项,需要的朋友参考一下 不同的事件源可以产生不同类别的事件。例如,按钮可以发送一个ActionEvent对象,而窗口可以发送WindowEvent对象。 AWT时间处理机制的概要: 1. 监听器对象是一个实现了特定监听器接口(listener interface)的类的实例。 2. 事件源是一个能够

  • 如何处理ListView中的每个按钮单击?活动课 如何管理ListView中每个项目的按钮单击?我尝试了许多方法…如何解决此问题?请任何人帮帮我...