gpt4 book ai didi

android - fragment 进入过渡的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:15:28 28 4
gpt4 key购买 nike

我正在使用运行 Android 5.0 的设备 minSdk是 21 和 targetSdk是 22。

应用说明

我在一个有 2 个 Activity 的应用程序上, Activity A 包含一个 GridView带有图片和文字, Activity B 包含一个 ImageView , 一个 TextView和一个 fragment 。此 fragment 包含与文本关联的图像列表。单击 Activity A 的图像时,会出现一个共享元素转换,将图像和文本移动到 ImageView。和 TextView Activity B。我还在 Activity A 和 B 之间设置淡入淡出过渡。 fragment 动态添加到 onCreate() 中的 Activity B。方法。我设置并进入和退出到 fragment 的过渡:

 MyFragment myFragment = new MyFragment();
myFragment.setEnterTransition(new Slide());
myFragment.setExitTransition(new Slide);
getFragmentManager().beginTransaction()
.add(R.id.container, myFragment, MyFragment.TAG)
.commit();

关于 fragment 退出过渡,我用了一个技巧,当按下后退按钮时,我用另一个 fragment 替换另一个 fragment 来强制它:

@Override
public void onBackPressed() {
if (myFragment.isVisible()) {
getFragmentManager().beginTransaction()
.replace(R.id.container, new Fragment())
.commit();
}
super.onBackPressed();
}

我的应用程序的主题是 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>

(我试过了,没有任何区别)。

应用问题

我的问题涉及无法正常工作的 fragment 进入过渡,而退出过渡工作正常。我尝试了不同的情况:

  • 没有显式定义的 Activity 转换:没有进入转换,播放共享元素转换时 fragment 已经存在。
  • 在 Activity A 和 B 中用 java 定义 Activity 转换:
    getWindow().setEnterTransition(new Fade());
    getWindow().setExitTransition(new Fade());
    结果与未定义显式 Activity 转换相同。
  • 使用 XML 定义 Activity 转换:
    <item name="android:windowEnterTransition">@transition/fade</item>
    <item name="android:windowExitTransition">@transition/fade</item>
    结果是 fragment 将通过淡入淡出和 Fragment.setEnterTransition() 进入。被忽略。
  • 在 XML 中定义 fragment 进入转换: <item name="android:fragmentEnterTransition">@transition/fade</item>结果是它完全被忽略了,之前的所有情况都会发生同样的情况。

我尝试了其他方法让它像这样工作:myFragment.setAllowEnterTransitionOverlap(false);但没什么...我还尝试在 ImageView 上设置点击监听器并仅在单击图像时添加 fragment 并且它起作用了!据此,我认为 fragment 转换的时间可能与 Activity 生命周期相比有问题,所以我尝试将代码放在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);

它也起作用了!

最后我尝试添加一个空 fragment ,然后将其替换为 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 版本。

Bonus bug:它仍然与 fragment 进入过渡有关。在拥有我之前描述的应用程序之前,我尝试了一个没有共享元素转换的版本。如果我不将转换名称设置为 TextView在 Activity B 中, fragment 永远不会有进入转换。但和以前一样,如果在 onclicklistener 方法中设置,它将起作用。我在运行 Android 5.0.x 的 2 台设备上尝试过此操作,但转换无效。我在一台装有 Android 5.1.1 的设备上进行了尝试,并且转换成功了(没有更改代码中的任何内容)!仍然不知道发生了什么......

所以我的最后一个问题是:对这种行为的解释是什么?是否有一种方法可以在不使用技巧的情况下使其发挥作用?

最佳答案

尝试在其 OnCreate 中为 fragment 添加进入和退出转换。这似乎对我有用

关于android - fragment 进入过渡的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32131714/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com