android dialogfragment弹出问题跳转微信支付返回时重新执行及闪屏问题

一个activity里面弹出dialogfragment弹窗输入金额跳转微信支付,当返回的时候看到弹出重新弹出,还闪屏了,加上如果有请求dialog圈圈,这尼玛看起来有点头痛,测试的人都说眼睛都闪瞎,哎逼到没法只有去看看怎么解决,我先看了一下小米商城,因为上面支付的方式很多,随便找了一个订单去支付选择微信,小米支付窗口是从底部弹出,然后跳转到微信支付界面,当点击返回按钮或者返回键的时候,就出现以上问题,然后百度过去百度过来,顺便看看android文档

https://developer.android.google.cn/reference/android/support/v4/app/DialogFragment

然后没有看出一个结果,百度上面说onstart 会执行show方法,onstop会执行dimiss,我也打印了log看到却是是执行了onstart,和onstop方法,onstart里面有show方法

 @Override
    public void onStart() {
        super.onStart();
        if (mDialog != null) {
            mViewDestroyed = false;
            mDialog.show();
        }
    }

然而我的onstop没有dimiss

 @Override
    public void onStop() {
        super.onStop();
        if (mDialog != null) {
            mDialog.hide();
        }
    }
 /**
     * Hide the dialog, but do not dismiss it.隐藏对话框,但不要忽略它。
     */
    public void hide() {
        if (mDecor != null) {
            mDecor.setVisibility(View.GONE);
        }
    }

这里是隐藏,个人感觉有点像dimiss但又没有销毁

看看点击返回的生命周期

E/msg: onStart....
E/msg: onPause....
E/msg: onSaveInstanceState....
E/msg: onstop
E/msg: onStart

看到生命周期就明白了,先隐藏然后又新的开始show,所以看到上面的,又重新弹出弹窗

百度上面说修改dialog动画,然而并没有效果。因为我的基类里面有

window.setWindowAnimations(R.style.Anim)
<style name="dialogAnim" mce_bogus="1" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/dialog_push_in</item>
        <item name="android:windowExitAnimation">@anim/dialog_push_out</item>
</style>

dialog_pusu_in

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromYDelta="100%p"
        android:toYDelta="0%p" />

    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />

</set>

为了加深自己的记忆,上面这个是窗口设置动画,还有一个activity设置动画

ctivity的进入和退出效果可以通过@android:activityOpenEnterAnimation,@android:activityOpenExitAnimation,@android:activityCloseEnterAnimation,@android:activityCloseExitAnimation这几个item设定,第一个表示新的activity创建进入效果,第2个表示activity还没有finish()下退出效果,第3个表示上一个activity返回进入效果,第4个表示的是activity finish()之后退出效果

<style name="myact">

      <item name="@android:activityOpenEnterAnimation">@anim/act_enter</item>

      <item name="@android:activityOpenExitAnimation">@anim/act_exit</item>

      <item name="@android:activityCloseEnterAnimation">@anim/act_enter</item>

      <item name="@android:activityCloseExitAnimation">@anim/act_exit</item>

  </style>

设置之后发现还是没有解决,看来不是这里问题,,哎,,心累

一段时间后,发现还是没有眉目,就暂且放下,先解决闪屏问题,百度上面一大把,都是在清单文件里面设置隐藏主题

<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:launchMode="singleInstance"
    android:screenOrientation="portrait"
    android:theme="@style/TranslucentTheme"/>

这是百度上面的,

<activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Translucent"/>

这是自己,感觉都应该一样吧,百度上面的那个没有试

呵呵,发现没有闪屏了,,让人意想不到的是连重新生命周期都变了,没有重新执行onstart 和onstop,也就没有show 和hide方法了

这就怪了源码

<!-- Theme for translucent activities (on API level 10 and lower). That is, windows
         that allow you to see through them to the windows behind.  This sets up the translucent
         flag and appropriate animations for your windows.  -->
    <style name="Theme.Translucent">
        <item name="windowBackground">@color/transparent</item>
        <item name="colorBackgroundCacheHint">@null</item>
        <item name="windowIsTranslucent">true</item>
        <!-- Note that we use the base animation style here (that is no
             animations) because we really have no idea how this kind of
             activity will be used. -->
        <item name="windowAnimationStyle">@style/Animation</item>
    </style>

windowIsTranslucent这个方法有点奇怪,,看下解释

如果windowIsTranslucent = true  ,不会执行onstart 和onstop 反之执行,我的理解就是,是false的话,相当于重新走下生命周期,从onstart开始,不知道理解的对不对,如果有那个大神知道里面的原因还请告知。

最后转了一大圈,就因为没有设置这个them主题。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值