- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用运行 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 进入过渡,而退出过渡工作正常。我尝试了不同的情况:
getWindow().setEnterTransition(new Fade());
getWindow().setExitTransition(new Fade());
结果与未定义显式 Activity 转换相同。
<item name="android:windowEnterTransition">@transition/fade</item>
<item name="android:windowExitTransition">@transition/fade</item>
结果是 fragment 将通过淡入淡出和 Fragment.setEnterTransition()
进入。被忽略。<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/
我有一个像这样的 fragment 栈 F1 -> F2 -> F3 -> F4 -> F5 现在我需要删除 F2、F3、F4 fragment 。 我需要如果我从 F5 fragment 按下后退按
我需要帮助来理解以下场景的工作原理以及如何实现结果。 我有一个名为 ShoppingCart 的类。它有一个名为 addItemsToShoppingCartFromPreviousOrder 的方法
我有一个包含 ViewPager 的 fragment 。这个 ViewPager 显然是由其他 Fragments 填充的。 我的问题是,ViewPager 中的 Fragment 是否有任何方法(
所以我正在实现一个 FragmentActivity 并尝试添加一个 fragment ,但是我遇到了多个问题。我以前做过这个,实际上我使用的代码与上一个项目(它工作的地方)相同,但由于某种原因它在这
Closed. This question needs details or clarity。它当前不接受答案。
我想将 Android X fragment (androidx.fragment.app.Fragment) 转换为 Android native fragment (android.app.Fra
假设我有一个包含 10 列文本类型 (20) 的 SQLite 表。 ListFragment 将从数据库中提取 4 列并使用 SimpleCursorAdapter 显示在列表中。 选择后,List
我有一个对话框 fragment ,我为延迟初始化创建了一个类。当我显示对话框时,它显示正常。但是,当我关闭对话框时,它崩溃的原因是: fragment 与 fragment 管理器无关。 我也尝试过
我想在 View 分页器更改为 fragment 时刷新该 fragment 。 package com.mcivisoft.rcbeam; import android.os.Bundle; imp
我有一个名为的 Activity MainActivity 我在容器 R.id.mainContainer 中添加了 fragment “BenefitFragment”。 在 BenefitFrag
所以我有这个 ClientListView,效果很好,可以显示客户,我可以单击一个客户并在右侧获取他们的详细信息(在我的第二个 fragment 中)。由此处的布局定义: 这很好用,但后来我
我试过这段代码,但点击第一个 fragment 中的按钮并没有改变第二个 fragment 中的字符串值。 这是第一个 fragment 的 kotlin 文件。它有两个按钮,点击它们可以更改字符串值
我有以下情况:我打开 fragment A 和目标,通过按钮的单击事件转到 fragment B。当我在 fragment B 中并点击后退按钮(为了返回 fragment A) 我想将一些参数传递给
我制作了一个 NavigationDrawer fragment ,其中包含 Home、Settings、Feedback 等项目。 home 项在点击 home 时应该打开,home 是在应用程序启
我正在一个接一个地替换 2 个 fragment ,两个 fragment 都有不同的选项菜单。当我替换第二个 fragment 时,它也显示第一个 fragment 的菜单。 setHasOptio
我有问题: android.app.Fragment$InstantiationException: Unable to instantiate fragment ${packageName}.${a
我正在研究 fragment 转换。当我用第二个 fragment 替换第一个 fragment 时,它出现在第一个 fragment 的下方。我希望它移动到第一个 fragment 之上。我该怎么做
我在抽屉导航里总共有 12 个 fragment 。每个 fragment 都有 volley 方法。每个 fragment 都显示自己的 Volley 响应,除了 position = 1 和 po
我在我的 Activity 中使用了两个 fragment 。最初我将向 Activity 添加一个 fragment 。然后在第一个 fragment 中使用监听器我想用第二个 fragment 替
我正在实现一个“fragments-101”程序,当相应的按钮被点击时我会替换一个 fragment 。然而,下面的事情发生了: 为什么会这样?为什么初始 fragment 没有被完全替换?MainA
我是一名优秀的程序员,十分优秀!