【问题标题】:Calling DialogFragment from Fragment从 Fragment 调用 DialogFragment
【发布时间】:2013-10-15 15:31:17
【问题描述】:

我正在尝试从我的 Fragment 类中调用 DialogFragment。我有一个 ImageView,想在我设置的 ImageView 的 onClickListener 中调用我的 DialogFragment 类。

我在尝试调用 DialogFragment 时设置的代码在 onClick 中出现错误。

我在“show”上收到一个错误,说明“DialogFragment 类型中的方法 show(FragmentManager, String) 不适用于参数 (FragmentManager, String)”,并且在“new Instance”上收到一个错误,说明“方法对于 MyDialogFragment 类型未定义 newInstance()"

这是我的代码:

@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
            MyDialogFragment dialog = MyDialogFragment.newInstance();
            dialog.show(getFragmentManager(), "fragmentDialog");
        }
    });

    return v;
}

DialogFragment 类:

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;

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 = new MyDialogFragment;
        return f;
    }
}

【问题讨论】:

  • 而且我看不到你的静态方法 MyDialogFragment.newInstance()

标签: android android-dialogfragment


【解决方案1】:

您没有名为newInstance 的静态方法。在您的对话框片段中添加以下内容

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

您可以在文档中找到更多信息和示例

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

【讨论】:

  • 我在“MyDialogFragment”上出现错误,提示“MyDialogFragment 无法解析为变量”和“f 无法解析为变量”。我已经更新了我的代码,所以你可以看到它的样子。
  • 注意!公共静态 MyDialogFragment newInstance() { MyDialogFragment f = new MyDialogFragment();返回 f; }
  • 是否可以将数据从 Fragment 本身传递给 DialogFragment(比如在多选视图中保持选择)而不是将数据传递给 Activity,然后在 DialogFragment 中检索该数据?
【解决方案2】:

你也可以在没有newInstance方法的情况下调用MyDialogFragment

DialogFragment newFragment = new MyDialogFragment(this);
newFragment.show(getFragmentManager(), "date_picker");

【讨论】:

    猜你喜欢
    • 2014-11-11
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2016-10-30
    • 2015-12-14
    • 2022-01-21
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多