首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示来自其他DialogFragment的DialogFragment

显示来自其他DialogFragment的DialogFragment
EN

Stack Overflow用户
提问于 2013-05-14 17:57:33
回答 9查看 16.7K关注 0票数 19

我有一个向用户显示选项列表的DialogFragment,其中一个选项是“删除”选项,当用户按下删除选项时,我想显示另一个DialogFragment作为确认,不幸的是,确认对话框没有显示。

以下是我的代码

第一个片段代码

代码语言:javascript
复制
public class ContactDialogOption extends SherlockDialogFragment {

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

    public ContactDialogOption() {
        super();
        // TODO Auto-generated constructor stub
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        builder.setIcon(R.drawable.ic_launcher);
        builder.setTitle(R.string.options);

        builder.setItems(new String[] {

        getString(R.string.call), getString(R.string.send_message),
                getString(R.string.copy), getString(R.string.edit),
                getString(R.string.delete)

        }, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                          if(which == 4) //delete
                          {
FragmentManager mgr = getActivity().getSupportFragmentManager();
    FragmentTransaction ft = mgr.beginTransaction();
        Fragment old = mgr.findFragmentByTag("SecondFragment");
        if (old != null) {
            ft.remove(old);
        }
        ft.addToBackStack(null);


fragment.show(ft, fragmentTag);
                          }
            }
        });

        return builder.create();
    }
}
EN

回答 9

Stack Overflow用户

发布于 2016-04-21 00:44:04

我遇到了完全相同的问题,当你试图从Fragment打开DialogFragment时,这种情况不会发生。

我找到的唯一解决方案是修改以下调用:

代码语言:javascript
复制
fragment.show(ft, fragmentTag);

至:

代码语言:javascript
复制
fragment.show(getFragmentManager(), fragmentTag);

这个解决方案的问题是我们不能在FragmentTransition上工作。

我不明白为什么行为与片段不同。

票数 9
EN

Stack Overflow用户

发布于 2016-05-24 05:05:59

我遇到了同样的问题,无法从第一个DialogFragment的正面和负面点击侦听器中显示另一个DialogFragment。我的解决方案是立即弹出第一个片段,这样就可以成功附加和显示第二个DialogFragment。

// Call this before adding the second dialog fragment activity.getSupportFragmentManager().popBackStackImmediate();

票数 2
EN

Stack Overflow用户

发布于 2016-10-31 20:37:52

请检查以下代码。希望这能对你们中的许多人有所帮助!

代码语言:javascript
复制
public class SubcategoryFragment extends DialogFragment {

public SubcategoryFragment() {

}

public static SubcategoryFragment newInstance(Integer code, String name) {
    SubcategoryFragment fragment = new SubcategoryFragment();

    mCode = code;
    mTitle = name;
    return fragment;
}


@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    liststring = new ArrayList<>();

    getAdapter();

}


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

    View view = inflater.inflate(R.layout.fragment_subcategory, container, false);
    gridView = (GridView) view.findViewById(R.id.sub_grid);


    return view;

}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    closeDialog = (ImageView) getDialog().findViewById(R.id.closeDialog);
    title = (TextView) getDialog().findViewById(R.id.dialogTitle);
    gridView = (GridView) getDialog().findViewById(R.id.sub_grid);

    title.setText(String.format("Choose %s", mTitle));
    closeDialog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getDialog().dismiss();
        }
    });


}

@Override
public Dialog onCreateDialog(@NonNull Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);


    // request a window without the title
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);

    //  closeDialog = (ImageView) dialog.findViewById(R.id.closeDialog);

    return dialog;

}



public void getAdapter() {

        gridAdapter = new HomeSubGridViewAdapter(getContext(), R.layout.gridview_custom_layout, liststring);
        gridView.setAdapter(gridAdapter);

}


}

这是从片段中调用对话框的方法

代码语言:javascript
复制
  fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
                    SubcategoryFragment postalFragment = SubcategoryFragment.newInstance(Integer.valueOf(item.getId()), item.getName());
                    postalFragment.show(fragmentManager, "SubcategoryFragment");

如果您觉得有任何问题,请随时询问

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16540186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档