【问题标题】:Calling DialogFragment调用 DialogFragment
【发布时间】:2013-10-09 09:57:10
【问题描述】:

我已经成功设置了我的 Dialog Fragment 类,现在我想从我设置的主 Fragment 类中调用它。

我尝试使用多个代码来调用它,但我不断收到错误和崩溃。

我需要在 onClick 中添加什么来调用我的对话框片段?

提前致谢!

主片段类:

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

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

    mImageView = (RecyclingImageView) v.findViewById(R.id.imageView);
    mImageView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {


            //Here


        }

    });

    return v;
}

对话框片段:

class MyDialogFragment extends DialogFragment {
Context mContext;

public MyDialogFragment() {
    mContext = getActivity();
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            mContext);
    alertDialogBuilder.setTitle("Set Wallpaper?");
    alertDialogBuilder.setMessage("Are you sure?");
    // null should be your on click listener
    alertDialogBuilder.setPositiveButton("OK", null);
    alertDialogBuilder.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });

    return alertDialogBuilder.create();
}

public static MyDialogFragment newInstance() {
    MyDialogFragment f = new MyDialogFragment();
    return f;
}

}

【问题讨论】:

  • 使用此代码显示对话框片段 MyDialogFragment newFragment = MyDialogFragment.newInstance(); newFragment.show(getFragmentManager(), null);
  • jack 如果你有MyDialogFragment dialog = new MyDialogFragment()public static MyDialogFragment newInstance() 有什么用?

标签: android android-fragments dialog


【解决方案1】:

解决办法:

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

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

    mImageView = (RecyclingImageView) v.findViewById(R.id.imageView);
    mImageView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
                MyDialogFragment dialog = MyDialogFragment.newInstance();
            dialog.show(getActivity().getFragmentManager(), "MyDialogFragment");
        }

    });

    return v;
}

【讨论】:

  • op 有一个静态方法 newInstance(),它返回对话框片段的实例。所以为什么这个MyDialogFragment dialog = new MyDialogFragment()
【解决方案2】:

试试下面的

FragmentTransaction ft = ((FragmentActivity)getActivity()).getSupportFragmentManager().beginTransaction();
MyDialogFragment dialog = MydialogFragment.newInstance();
dialog.show(ft, "Tag");

这也是一个很棒的TUTORIAL

【讨论】:

  • op 有一个静态方法newInstance(),它返回对话框片段的实例。
【解决方案3】:

在您的对话框片段中,您已经拥有以下返回对话框片段实例的内容。

public static MyDialogFragment newInstance() {
    MyDialogFragment f = new MyDialogFragment();
    return f;  
}

所以试试下面的

DialogFragment newFragment = MyDialogFragment.newInstance();// call the static method
newFragment.show(getActivity().getFragmentManager(), "dialog");

看文档有例子

http://developer.android.com/reference/android/app/DialogFragment.html

【讨论】:

    【解决方案4】:

    这是我从 FragmentACtivity 调用的方式

    FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
                    ContactsNavi userPopUp = new ContactsNavi();
                    userPopUp.show(fragmentManager,"baglantilar");
    

    【讨论】:

      猜你喜欢
      • 2013-08-17
      • 2021-04-20
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多