我使用在Android 5.0運行的裝置,所述minSdk
是21和targetSdk
是22與片段問題進入過渡
應用描述
我在帶2周的活動的應用程序,活動A包含帶有圖片和文字的GridView
,活動B包含一個ImageView
,一個TextView
和一個片段。該片段包含與文本關聯的圖像列表。 單擊活動A的圖像時,會出現一個共享元素轉換,它將圖像和文本移動到活動B的ImageView
和TextView
。我還在活動A和B之間設置淡入淡出過渡。將片段動態添加到onCreate()
方法中的活動B.我設置,進入和退出過渡到片段:
@Override
public void onBackPressed() {
if (myFragment.isVisible()) {
getFragmentManager().beginTransaction()
.replace(R.id.container, new Fragment())
.commit();
}
super.onBackPressed();
}
:
MyFragment myFragment = new MyFragment();
myFragment.setEnterTransition(new Slide());
myFragment.setExitTransition(new Slide);
getFragmentManager().beginTransaction()
.add(R.id.container, myFragment, MyFragment.TAG)
.commit();
關於片段的出口轉型,我用了一招,按後退按鈕的時候,我用另一個迫使它取代片段
我的應用程序的主題是Theme.Material
一個孩子,所以我沒有定義
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
也不
<item name="android:windowActivityTransitions">true</item>
<item name="android:windowContentTransitions">true</item>
(我試過了,沒有區別)。
應用問題
我的問題是關於碎片進入其工作不正常,而出口過渡工作正常過渡。 我嘗試不同的情況:
- 沒有明確定義的活動轉變:有沒有進入過渡,這個片段已經在那裏當共享元素轉換播放。
- 用活動A和B中的java定義活動轉換:
getWindow().setEnterTransition(new Fade()); getWindow().setExitTransition(new Fade());
結果與未定義的顯式活動轉換相同。 - 定義了一個使用XML的活動轉換:
<item name="android:windowEnterTransition">@transition/fade</item> <item name="android:windowExitTransition">@transition/fade</item>
結果是片段將通過衰落進入並且Fragment.setEnterTransition()
被忽略。 - 定義XML中的片段輸入轉換:
<item name="android:fragmentEnterTransition">@transition/fade</item>
結果是它被完全忽略,之前的所有情況都會發生相同的情況。
我嘗試過其他的東西,使它像這樣的工作:myFragment.setAllowEnterTransitionOverlap(false);
但沒有...... 我也試着設置在ImageView
點擊監聽器,並添加片段只在點擊圖像和它的工作!因此,我認爲與活動生命週期相比,片段轉換的時間可能存在問題,所以我嘗試將代碼放入onResume()
方法中,但仍然沒有任何結果。
然後我試圖使用postDelayed()
方法:
MyFragment myFragment = new MyFragment();
myFragment.setEnterTransition(new Slide());
myFragment.setExitTransition(new Slide);
mImageView.postDelayed(new Runnable() {
@Override
public void run() {
getFragmentManager().beginTransaction()
.add(R.id.container, myFragment, MyFragment.TAG)
.commit();
}
}, 1000);
而且還成功了!
最後,我想補充一個空的片段,然後通過myFragment
替換:
MyFragment myFragment = new MyFragment();
myFragment.setEnterTransition(new Slide());
myFragment.setExitTransition(new Slide);
getFragmentManager().beginTransaction()
.add(R.id.container, new Fragment)
.commit();
getFragmentManager().beginTransaction()
.replace(R.id.container, myFragment, MyFragment.TAG)
.commit();
,但仍然沒有...
所以現在我想知道如果有什麼我失蹤讓它工作而不使用詭計...而事情是我知道它可以工作,因爲我可能在5個月前開始在應用程序上工作,它工作正常!所以我不知道發生了什麼,我沒有更新我的Android版本。
獎金bug:它仍然是關於片段輸入轉換。在我之前描述的應用程序之前,我嘗試了一個沒有共享元素轉換的版本。如果我沒有爲活動B的TextView
設置轉換名稱,則該片段將永遠不會有輸入轉換。但是和以前一樣,如果在onclicklistener方法中設置,它將起作用。我在Android 5.0.x上運行的兩個設備上嘗試了這一點,並且轉換不起作用。我嘗試了Android 5.1.1的設備,並且轉換工作正常(無需更改代碼中的任何內容)!仍然不知道發生了什麼......
所以我的最後一個問題是:這種行爲的解釋是什麼,有沒有辦法讓它工作而不使用詭計?
我想我陷入了類似的問題。唯一的區別是我被困在退出轉換中。你解決這個問題嗎? – Uday