标签: dialogfragment

检测后退按钮但不解除对话碎片

我有一个浮动对话框的对话框片段,其中包含一个特殊的键盘,当用户按下EditText字段时会弹出(正常的IME停止显示).

当用户按下后退按钮(就像使用普通的IME服务一样)时,我希望键盘被解除(visibility = GONE),但对话框仍然可见.然而,就我在SO和其他地方的相当广泛的阅读中所看到的,似乎没有办法做到这一点.

如果我将对话框设置为不可取消,那么我不会被onCancel()或onDismiss()通知,因为该对话框不可取消.

如果我将对话框设置为可取消,则会收到通知,但对话框将被取消.

我无法将onKeyListener附加到片段中的对话框,因为它被系统替换,以便片段可以处理对话框的生命周期.

有没有办法做到这一点?或者,为了Fragment系统的目的,是否可以访问完全围起来的关键事件的检测?

android dialog dialogfragment

65
推荐指数
8
解决办法
4万
查看次数

DialogFragment优于AlertDialog

在开发Android应用程序时,我已经读过,建议使用DialogFragment而不是直接使用AlertDialog来显示警报和确认.

例如,在DialogFragment的文档中完成此操作:http://developer.android.com/reference/android/app/DialogFragment.html

人们还说他们更喜欢这个: Android DialogFragment vs Dialog

我想知道这种方法的优点,因为代码变得更加复杂.

谢谢

android android-alertdialog android-dialogfragment dialogfragment

61
推荐指数
2
解决办法
4万
查看次数

在解雇之前更改DialogFragment进入/退出转换

我有一个DialogFragment,我在onActivityCreated方法中为进入/退出设置动画,如下所示

  @Override
    public void onActivityCreated(Bundle arg0) {
        super.onActivityCreated(arg0);
        getDialog().getWindow()
                .getAttributes().windowAnimations = R.style.DialogAnimation;
    }
Run Code Online (Sandbox Code Playgroud)

我的DialogAnimation样式文件如下

<style name="DialogAnimation">
        <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
        <item name="android:windowExitAnimation">@android:anim/fade_out</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

这对我有用......

现在我的问题是我希望有两个不同的退出动画,一个用于点击确定按钮,一个用于取消按钮.所以我做的是我尝试在解雇之前更改转换,但它没有工作..任何解决方案如何实现......这就是我的尝试.

  @Override
    public void onClick(View v) {
        getDialog().getWindow()
                .getAttributes().windowAnimations = R.style.DialogAnimation2;
        this.dismiss();
    }
Run Code Online (Sandbox Code Playgroud)

android buttonclick android-animation dialogfragment

36
推荐指数
3
解决办法
2万
查看次数

DialogFragment上的commitAllowingStateLoss

我有一个IllegalStateException展示DialogFragment:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
Run Code Online (Sandbox Code Playgroud)

我知道它为什么会发生但我想通过重写DialogFragment 函数使用commitAllowingStateLoss来显示对话框show:

public void show(FragmentManager manager, String tag) {
    mDismissed = false;
    mShownByMe = true;
    FragmentTransaction ft = manager.beginTransaction();
    ft.add(this, tag);
    ft.commit(); //replace it by commitAllowingStateLoss
}
Run Code Online (Sandbox Code Playgroud)

但我不访问mDismissedmShownByMe变量,我如何访问这些变量来修改它们,就像它的父母一样.

android android-fragments android-dialogfragment dialogfragment

26
推荐指数
3
解决办法
7605
查看次数

如何在 DialogFragment 中正确使用 Android 视图绑定?

在 DialogFragment() 中使用 Android 视图绑定的正确方法是什么?

官方文档只提到了 Activity 和 Fragment:https : //developer.android.com/topic/libraries/view-binding

android dialogfragment android-viewbinding

20
推荐指数
1
解决办法
7645
查看次数

BottomSheetDialogFragment - 听取用户事件解雇

我如何听取最后解雇BottomSheetDialogFragment?我想在最终解雇时保存用户更改...

我试过以下:

方法1

如果通过向下滑动对话框解除对话(不在背面按压或外面触摸),则仅触发此操作

@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
    Dialog d = super.onCreateDialog(savedInstanceState);
    d.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {

            BottomSheetDialog d = (BottomSheetDialog) dialog;   
            FrameLayout bottomSheet = (FrameLayout) dialog.findViewById(android.support.design.R.id.design_bottom_sheet);

            BottomSheetBehavior behaviour = BottomSheetBehavior.from(bottomSheet);
            behaviour.setState(BottomSheetBehavior.STATE_EXPANDED);
            behaviour.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
                @Override
                public void onStateChanged(@NonNull View bottomSheet, int newState) {
                    if (newState == BottomSheetBehavior.STATE_HIDDEN)
                    {
                        // Bottom Sheet was dismissed by user! But this is only fired, if dialog is swiped down! Not if touch outside dismissed the …
Run Code Online (Sandbox Code Playgroud)

android dialog android-dialogfragment dialogfragment bottom-sheet

19
推荐指数
5
解决办法
2万
查看次数

Dialog片段与wrap_content以全屏显示.如何使其成为布局的高度而不是全屏?

我创建了一个自定义对话框片段及其xml,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"

    android:padding="5dip" >

    <ListView
        android:id="@+id/product_list"
         android:background="@drawable/border_details"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         />

    <RelativeLayout
        android:id="@+id/AddtoCart"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginTop="10dp"

        android:background="#005959" >

        <Button
            android:id="@+id/button_addToCart"
            android:layout_width="250dp"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:background="@drawable/gradient_button"
            android:layout_marginTop="2dp"
            android:layout_marginBottom="2dp"
            android:text="@string/add_to_cart"
            android:textColor="#000000" />
    </RelativeLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

当我调用此对话框时,它将按照屏幕截图中的全屏显示:

截图

如何将此对话框的大小限制为列表和按钮的高度?

如何删除多余的空白区域?

android android-fragments dialogfragment

17
推荐指数
2
解决办法
1万
查看次数

没有FragmentActivity的DialogFragment

是否有可能使用DialogFragment使用时Activity的替代FragmentActivity?这些show()方法需要一个FragmentManager.

我想实现一个只包含一个的Dialog,EditTextAndroid开发人员的教程说我必须在对话框片段上使用自定义布局.所以我问因为我不想改变只使用FragmentActivity1个对话框.

解决:我决定使用FragmentActivity而不是Activity这样,它不会变得更复杂.

android android-activity dialogfragment

13
推荐指数
1
解决办法
2万
查看次数

添加警报窗口后,DialogFragment未显示

我有一个函数,当触发时,成功显示一个DialogFragment与以下代码

DialogFragment

DialogFragment dialog;
View dialogView;
Context activityContext;

...

dialog = new DialogFragment(){
   @Override public Dialog onCreateDialog(Bundle savedInstanceState) {
      dialogView = getActivity().getLayoutInflater().inflate(R.layout.customView, null);
      ...
      AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
      builder.setView(dialogView);
      return builder.create();
   }
};

dialog.show(activityContext.getSupportFragmentManager() , "MyDialog");
Run Code Online (Sandbox Code Playgroud)

问题是,在我添加一个带有以下代码的系统警报窗口后,DialogFragment不再显示,但是如果我传递到另一个应用程序,当我的应用程序最小化时,我可以看到DialogFragment,同时它减小了它的大小

系统警报窗口

WindowManager mWindowManager;
WindowManager.LayoutParams params;

...

mWindowManager = (WindowManager)activityContext.getSystemService(Context.WINDOW_SERVICE);
params = new WindowManager.LayoutParams(
   WindowManager.LayoutParams.WRAP_CONTENT,
   WindowManager.LayoutParams.WRAP_CONTENT,
   WindowManager.LayoutParams.TYPE_PHONE,
   WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
   PixelFormat.TRANSLUCENT
}
params.gravity = Gravity.CENTER_VERTICAL | Gravity.RIGHT;
addView(((LayoutInflater)activityContext.getSystemService("layout_inflater")).inflate(R.layout.floatingBotton, null));
Run Code Online (Sandbox Code Playgroud)

那么......为什么我不能在顶部看到我的对话框(据我所知,对话框正在显示)为什么它只在显示系统警报窗口时发生

我已尝试使用系统警报窗口的其他标志,但我遇到了与我尝试过的问题相同的问题

android android-dialogfragment dialogfragment system-alert-window

13
推荐指数
1
解决办法
843
查看次数

Android:DialogFragment.dismissAternal在DialogFragment.dismissInternal的NullPointerException

显示ProgressDialog时崩溃应用程序.我正在使用滑出式键盘在手机上进行测试.当显示对话框时,我滑动键盘和应用程序崩溃.

public static class ProgressDialogFragment extends DialogFragment
{

    public ProgressDialogFragment()
    {
        super();
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        final ProgressDialog dialog = new ProgressDialog(getActivity());
        dialog.setMessage(getString(R.string.dlg_progress_title));
        dialog.setIndeterminate(true);
        dialog.setCancelable(false);
        return dialog;
    }

    @Override
    public void show(FragmentManager manager, String tag)
    {
        try
        {
            super.show(manager, tag);
        }
        catch (IllegalStateException e)
        {
            Log.d(TAG, e.getMessage());
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

崩溃日志:

> 04-25 20:49:46.999: E/AndroidRuntime(7904): FATAL EXCEPTION: main
04-25 20:49:46.999: E/AndroidRuntime(7904): java.lang.NullPointerException
04-25 20:49:46.999: E/AndroidRuntime(7904):     at android.support.v4.app.DialogFragment.dismissInternal(DialogFragment.java:184)
04-25 20:49:46.999: E/AndroidRuntime(7904):     at android.support.v4.app.DialogFragment.dismissAllowingStateLoss(DialogFragment.java:165)
04-25 20:49:46.999: E/AndroidRuntime(7904):     at com.fisherman.activity.HomeActivity$2.onPostExecute(HomeActivity.java:268) …
Run Code Online (Sandbox Code Playgroud)

android nullpointerexception android-fragments dialogfragment

12
推荐指数
1
解决办法
2404
查看次数