从Fragment调用DialogFragment(不是FragmentActivity)?

Eli*_*age 16 android android-fragments android-fragmentactivity

这是我的问题:我确实有一个FragmentActivity,它包含一个片段列表(在它们之间导航的方法)在其中一个片段中我需要调用一个DialogFragment来显示该片段中包含的图片的"缩放".

但似乎你不能直接从Fragment调用DialogFragment.

有没有办法让FragmentActivity获得一些"回调",以便在片段上显示DialogFragment.

或者只是一个"故障"直接从片段中调用它.

如果是这样的话,你是否知道一个关于它的好教程?

最好的祝福,

艾莉佩奇

Man*_*oba 15

当你创建一个新的时Dialog,你可以简单地使用这个(非常)简单的方法来调用它Fragment.

DialogFragment dialog = DialogFragment.instantiate(getActivity(), "Hello world");
dialog.show(getFragmentManager(), "dialog");
Run Code Online (Sandbox Code Playgroud)

如果您想使用自己的对话框,请使用那种代码.

public class MyDialogFragment extends DialogFragment
{
    //private View pic;

    public MyDialogFragment()
    {
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        View view = getActivity().getLayoutInflater().inflate(R.layout.fragment_my_dialog, new LinearLayout(getActivity()), false);

        // Retrieve layout elements
        TextView title = (TextView) view.findViewById(R.id.text_title);

        // Set values
        title.setText("Not perfect yet");

        // Build dialog
        Dialog builder = new Dialog(getActivity());
        builder.requestWindowFeature(Window.FEATURE_NO_TITLE);
        builder.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        builder.setContentView(view);
        return builder;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 似乎适用于DialogFragment.但是当我创建:公共类MyDialogFragment扩展DialogFragment {}里面有一个"oncreateView"(调用xml)它打破并显示这条消息:"canot resolve method show"但是由于MyDialogFrament扩展了DIalogFragments而没有任何覆盖,不应该这样在每种情况下工作? (2认同)
  • 我已根据您的对话请求更新了我的答案. (2认同)
  • 但是,如果我使用基本的DialogFragment,它突然可以解决方法"show".由于MyDialogFragment扩展了DialogFragment并且只覆盖onCreateDialog,所以似乎方法show必须在某些部分与onCreate链接?否则我不明白为什么它在一个案例中不起作用而在另一个案例中起作用,因为两者之间应该没有区别. (2认同)

Ami*_*mit 7

检查导入语句.如果我们使用

ExampleDialogFragment dialog = new ExampleDialogFragment ();
dialog .show(getFragmentManager(), "example");
Run Code Online (Sandbox Code Playgroud)

然后确保导入

import android.app.DialogFragment;
import android.app.Fragment;
Run Code Online (Sandbox Code Playgroud)

不是来自支持库.

import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
Run Code Online (Sandbox Code Playgroud)


Pra*_*ama 6

如果您需要在片段内显示片段对话框,它将很有帮助

对话片段

public class DialogBoxFragment extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    View rootView = inflater.inflate(R.layout.dialog_fragment, container, false);
    getDialog().setTitle("simple dialog");
    return rootView;
}
}
Run Code Online (Sandbox Code Playgroud)

现在将片段对话框显示为片段

DialogFragment dialogFragment = new DialogFragment ();
                            dialogFragment.show(getActivity().getFragmentManager(),"simple dialog");
Run Code Online (Sandbox Code Playgroud)

  • 如何将数据从此DialogFragment返回到调用Fragment? (2认同)