dialogfragment.show()的问题

时间:2012-07-23 12:51:16

标签: android android-dialogfragment

我的应用程序中有一个对话框片段,我称之为 -

    dialog=new
     FragmentActivity.dfragment(this);

    getFragmentManager().findFragmentById(R.id.fragment3).getView()
            .findViewById(R.id.btn1)
            .setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                                             dialog.show(getFragmentManager(), "Dialog");
                                             System.out.println(getFragmentManager().findFragmentByTag("Dialog").getTag());
                     // gives null pointer exception
                }
            });

// Dialog frag类。

public static class dfragment extends DialogFragment {
    public dfragment(DialogDisplayed dd) {
        super();
        this.dd = dd;
        Bundle b = new Bundle();
        b.putBoolean("Value", true);
        setArguments(b);
    }

    DialogDisplayed dd;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        getDialog().setTitle("DIALOG FRAGMENT");
        View v = inflater.inflate(R.layout.dialog_layout, container);
        v.findViewById(R.id.diss).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(getActivity(), "Setting the bundle",
                        Toast.LENGTH_SHORT).show();

                dismiss();
                dd.onDialogClicked();
            }
        });
        return v;
    }

}

我相信它无法通过标记“Dialog”找到片段,即使文档说它将它添加到FragManager中。  我想知道它为什么会例外 感谢

1 个答案:

答案 0 :(得分:0)

您有空引用异常原因

  

dialog.show(getFragmentManager(),“Dialog”);

不会立即将您的片段添加到fragmentManager,而是创建FragmentTransaction并安排提交。当UI线程准备就绪时,将执行此提交。 有关详细信息,请参阅http://developer.android.com/reference/android/app/FragmentTransaction.html#commit()