32

可以将上下文变量传递给 DialogFragment?

我在对话框中使用此代码来传递字符串:

public static ConfirmDialog newInstance( String f) {
    ConfirmDialog d = new ConfirmDialog();

    Bundle args = new Bundle();
    args.putString("FILE_NAME", f);
    d.setArguments(args);

    return d;
}

但我没有找到像 putString 这样的函数来传递上下文。有可能这样做吗?

4

4 回答 4

68

DialogFragment有一个非常方便的获取Context实例的方法:

getActivity()

Fragment#getActivity()将返回附加到的Activity(即 a Context)的实例。在调用FragmentFragment 之后使用它。onAttach()下图说明了Fragment生命周期,如您所见,使用getActivity()from onCreate()toonDestroy()应该是一个有效的调用。

在此处输入图像描述

有关更多信息,请阅读Fragment文档

于 2013-03-17T18:08:47.583 回答
9
@Override
public void onAttach(Activity activity) {
    // TODO Auto-generated method stub
    super.onAttach(activity);
    context=activity;
}

需要使用 onAttach 方法:用于对话框片段

于 2014-06-17T07:10:16.120 回答
4

onAttach(Activity activity)现在已弃用,

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}


改用onAttach (Context context)

@Override
public void onAttach(Context context) {
    super.onAttach(context);
}
于 2016-04-23T10:46:57.087 回答
1

像这样使用:

public class Dialog extends DialogFragment implements OnClickListener {
    public void onClick(View v) {
    switch (v.getId()) {
        case R.id.message: {
            this.startActivity(new Intent(context, Login.class));
                                 //or use getActivity() instead of context
            }
            break;
         }
    }
    @Override
    public void onAttach(Activity activity) {
        // TODO Auto-generated method stub
        super.onAttach(activity);
        context=activity;
    }
}
于 2015-02-11T09:03:41.367 回答