1. 程式人生 > >android dialogfragment彈出問題跳轉微信支付返回時重新執行及閃屏問題

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主題。