标签: dialogfragment

在传递Android DialogFragment参数时,onCreateDialog bundle agument意外地为null

我正在尝试使用DialogFragment在Android中显示一个基本对话框,使用对话框消息的参数,如StackOverflow线程DialogFragment文档中所述.我的问题是onCreateDialog中的Bundle参数savedInstanceState始终显示为null,这意味着该活动显示一个空对话框而不是带有消息的对话框.如何从newInstance工厂方法获取非null的bundle内容以显示在onCreateDialog中?或者我只是遗漏了别的东西?

我从文档中看到的唯一重要区别是我使用的是非静态类.我希望积极的对话框按钮取决于消息的内容,所以这是故意的.

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

public class SampleDialog extends DialogFragment {
    public static final String DIALOG_MESSAGE = "dialogMessage";

    private String dialogMessage;

    // arguments are handled through factory method with bundles for lifecycle maintenance
    public SampleDialog(){
    }

    public static SampleDialog newInstance(String dialogMessage){
        SampleDialog fragment = new SampleDialog();
        Bundle args = new Bundle();
        args.putString(DIALOG_MESSAGE, dialogMessage);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        if(savedInstanceState != null) {
            dialogMessage = …
Run Code Online (Sandbox Code Playgroud)

java android bundle dialogfragment

6
推荐指数
1
解决办法
5585
查看次数

Android 6.0 DatePickerDialog主题

似乎任何使用Marshmallow(Android 6.0)的人都无法DatePicketDialog在我的应用程序中使用.似乎遇到了某种我遇到的主题问题.我用一个DialogFragment包含一个DatePicketDialog供用户选择生日.以下是Android 5.x和6.x的DialogFragment镜头.

Android 5.x Android 6.x

我试图在DatePickerDialog构造函数中添加一个主题,但这使得DialogFragment全屏,我不希望这样.有谁知道我怎么能看到DatePickerDialog它像棉花糖之前?

更新1

这是我创建的代码DialogFragment:

DialogFragment ageFragment = new DatePickerDialogFragment();
ageFragment.show(getFragmentManager(), "datePicker");
Run Code Online (Sandbox Code Playgroud)

这是onCreateDialog里面的DatePickerDialogFragment:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current date as the default date in the picker if no filters are set
    Calendar cal = Calendar.getInstance();
    // Set the date 18 years previous, since only 18 and older are allowed on the app
    cal.add(Calendar.YEAR, -18);
    int year, …
Run Code Online (Sandbox Code Playgroud)

android themes datepickerdialog dialogfragment

6
推荐指数
3
解决办法
9898
查看次数

隐藏以在DialogFragment中显示和隐藏键盘

在我的对话框片段中,我能够显示键盘使用

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT STATE_VISIBLE);
Run Code Online (Sandbox Code Playgroud)

但我无法隐藏它dismiss.

我试过了

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Run Code Online (Sandbox Code Playgroud)

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Run Code Online (Sandbox Code Playgroud)

两者都不起作用.

我也尝试使用显示和隐藏键盘

InputMethodManager inputManager = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.toggleSoftInput(0, 0); 
Run Code Online (Sandbox Code Playgroud)

InputMethodManager inputManager = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)

但这些无法显示或隐藏键盘.

 public static class MyDialogFragment extends DialogFragment
    {
        @Nullable @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            return inflater.inflate(R.layout.my_input_dialog, container, false);
        }

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

            final EditText editText = (EditText)v.findViewById(R.id.input);
            // this line below is able to show the keyboard 
            getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
            Button add = (Button)v.findViewById(R.id.add_btn);
            add.setOnClickListener(new …
Run Code Online (Sandbox Code Playgroud)

android android-softkeyboard android-dialogfragment dialogfragment

6
推荐指数
2
解决办法
6335
查看次数

getView的DialogFragment在onDismiss上返回null

我有一个从DialogFragment派生的自定义对话框.

当用户单击确定按钮时,我需要保存屏幕上的信息.

所以我使我的PositiveButton调用dismiss并且我实现了onDismiss方法来保存数据.

在onDismiss方法中,我需要从Dialog上的editView获取数据.我使用getView().findViewByID得到EditView中,但该方法GetView()返回null.

这是我的代码:

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

    builder.setView(inflater.inflate(R.layout.dialog_signin, null))
           .setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int id) {
                   LoginDialogFragment.this.getDialog().dismiss();
               }
           })
           .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   LoginDialogFragment.this.getDialog().cancel();
               }
           });      
    return builder.create();
}

@override
public void onDismiss(){
    EditView view = (EditView)getView().findViewByID(R.id.edit);
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以将OnCreateDialog中膨胀的视图保存为属性,但这对我来说似乎不对.

如何在onDismiss中从屏幕上获取视图的正确方法?

Ps:我工作的地方不允许我发布我的代码,因此我从谷歌中获取了代码并将其更改为尽可能接近我的代码.

android view dialogfragment

5
推荐指数
1
解决办法
5562
查看次数

NumberPicker 无法在 DialogFragment 内工作

我正在学习 Android 编程的基础知识,但在使用 NumberPicker 时遇到了一些问题。

\n\n

我已经接近我想要的了,对话框打开,小时和分钟数字选择器出现,但它们上面和下面没有数字可供滚动。我也无法使用弹出的键盘编辑数字。我尝试添加 onValueChange 侦听器,但当我使用键盘时它没有生成任何事件。

\n\n

任何人都可以提供有关如何解决此问题的建议吗?到目前为止,我注意到我尝试使用某些活动或片段中的小部件执行很多操作,而这些特定类不支持这些操作。

\n\n

以下是相关代码和图像的片段:

\n\n

我有一个带有两个按钮的 ClockActivity 类:

\n\n
...\npublic class ClockActivity extends ActionBarActivity {\n\n...\n\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    setContentView(R.layout.activity_clock);\n\n    // Define gui objects\n    ...\n    mWorkForTime           = (Button)findViewById(R.id.work_for_time);\n    mBreakForTime          = (Button)findViewById(R.id.break_for_time);\n\n    // Add listeners for the work for/break for buttons\n    mWorkForTime.setOnClickListener(new View.OnClickListener() {\n        @Override\n        public void onClick(View v) {\n            // Bring up the picker fragment\n            DialogFragment newFragment = TimePickerFragment.newInstance(R.string.work_title);\n            newFragment.show(getSupportFragmentManager(), "WorkTimePicker");\n        }\n    });\n    mBreakForTime.setOnClickListener(new View.OnClickListener() {\n        @Override\n        public void onClick(View …
Run Code Online (Sandbox Code Playgroud)

android android-dialogfragment numberpicker dialogfragment

5
推荐指数
1
解决办法
3387
查看次数

如何将 Fragment 转换为 DialogFragment

我面临着通过 DialogFragment 显示片段的问题。事实上,在我的应用程序中,我使用一些片段来显示应用程序的内容。

对于智能手机,我直接在 FrameLayout 中实例化我的片段。对于平板电脑,我将通过 DialogFragment 显示一些内容。我的想法是重用我的片段来保留它的视图和行为。并将其转换为 DialogFragment 以便能够访问 DialogFragment 行为。

我尝试创建一个 DialogFragment,显示用于实例化我的片段的 FrameLayout,但这种方式似乎不可能。

我找不到其他方法可以做到这一点。

有人有解决这个问题的方法吗?

android fragment android-fragments dialogfragment

5
推荐指数
0
解决办法
837
查看次数

android中Dialog和DialogFragment的区别?

在查看 android 中的文档时,我注意到了 classes: Dialog and DialogFragment( standard , v4 )。教程似乎可以互换使用这些术语,因此我对它们的差异感到困惑。

告诉我我的理解是否正确: aDialogFragment本质上是一个处理生命周期事件的包装器,同时返回一个 Object 类型Dialog,它是实际的 UI 对象?

android dialog dialogfragment

5
推荐指数
0
解决办法
3289
查看次数

DialogFragment 上的 Android setLayoutDirection

我最近完成了一个项目的构建,我的下一个目标是专门为 RTL 创建一个构建风格,一个重要的注意事项是我需要强制 RTL 布局,独立于设备语言。

所以我设法使用视图方法setLayoutDirection在大多数应用程序上强制 RTL并旋转所有不合作的视图,但由于某种原因,我无法镜像应用程序中的对话框,这些对话框仅在设备语言更改。我试图翻转 onCreateDialog 中的对话框,访问返回 null 的 getView,但我不确定我还能做什么......

有人可以帮我将 DialogFragment 翻转到 RTL 吗?

谢谢。

java android dialog right-to-left dialogfragment

5
推荐指数
1
解决办法
2435
查看次数

打开软键盘时,始终会调整DialogFragment的大小

我在全屏显示自定义DialogFragment时遇到一些问题.此对话框具有可滚动且具有autocompletetextview的内容.

最初显示的对话框顶部有一个边距 - 以编程方式设置为布局内容顶部的透明视图.一旦autocompletetextview被聚焦,该边距就会减少到0(从而产生对话框以全屏模式进入的错觉).此时键盘也显示出来.

目前,键盘缩小了对话框的大小,对话框上的按钮向上移动,位于键盘上方.这会产生一个问题,因为只要autocompletetextview失去焦点,对话框就会调整大小,并且由于键盘调整大小也会创建一个闪烁:它们隐藏了键盘 - >对话框在底部移动 - >对话框调整为全屏 - >对话框resisez到初始大小

当前创建的对话框:

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

        dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);

        if (!hasTitle()) {
            dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        }

        // the content
        //final RelativeLayout root = new RelativeLayout(getActivity());
        //root.setLayoutParams(
        //        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        //dialog.setContentView(root);

        if (position != null) {
            WindowManager.LayoutParams windowParams = dialog.getWindow().getAttributes();
            windowParams.x = position.x;
            windowParams.y = position.y;
            dialog.getWindow().setAttributes(windowParams);
        } else {
            dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        }

        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(hasTitle() ? Color.WHITE : Color.TRANSPARENT));
        dialog.getWindow().setGravity(Gravity.TOP | Gravity.START);

        return dialog;
    }
Run Code Online (Sandbox Code Playgroud)

这部分工作,因为对话框没有填充宽度,它要小得多.

有些东西可以解决这个问题,但它会产生另一个问题:

@Override …
Run Code Online (Sandbox Code Playgroud)

keyboard android resize dialogfragment

5
推荐指数
1
解决办法
2663
查看次数

显示键盘时防止 DialogFragment 调整大小/折叠

我一直在让我的对话框片段在显示键盘时不调整大小/折叠时遇到问题。我在使用 Android 30 这样的特定 API 时遇到了这个问题,但在使用 Android 27 这样的旧 API 时却没有遇到这个问题。我在下面提供了屏幕截图,我可以确认他会影响我的特定 API 应用程序中的所有对话框片段。

Android API 30 对话框截图(调整大小问题)

Android API 27 对话框截图(所需的功能)

编辑:Tom Ladek 指出此问题仅发生在 SDK 30 上。SDK 29 及以下不受影响。

android dialog android-fragments dialogfragment android-studio

5
推荐指数
1
解决办法
232
查看次数