Articles of android fragments

没有视图的片段在配置更改时崩溃

我有一个UI,我需要在横向模式下显示Fragment (带有视图),但不能在纵向模式下显示。 在纵向模式下,它应该仍然可用,但会使用ListPopupWindow显示其结果。 我想我可以通过使用标签来处理景观布局,同时以编程方式创建片段(如果它没有启动)(在我们是纵向的情况下)。 只要您从横向开始,这样就可以正常工作,如果您以纵向方式开始以编程方式创建片段,则在您尝试将片段附加到布局时旋转模拟器时,应用程序将崩溃: java.lang.IllegalStateException:Fragment没有创建视图。 在android.app.Activity.onCreateView(Activity.java:4095) Fragment.isInLayout()的文档似乎暗示它应该能够以这种方式处理它: 如果布局通过标记作为活动视图层次结构的一部分包含,则返回true。 当通过标记创建片段时,这将始终为真,除非旧片段从先前状态恢复且未出现在当前状态的布局中。 所以问题是如何正确地做到这一点或者是否有我遗漏的东西? 更新: 好像isInLayout()似乎不像现在那样表现。 如果已手动将Fragment添加到容器,则返回false。 此外,如果您手动将Fragment添加到容器,然后将(设备)旋转到不包含该布局的布局,它将崩溃: 引起:java.lang.IllegalArgumentException:在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:722)中找不到片段SearchFragment {4042f868#2 id = 0x7f060011 SearchFragment}的id 0x7f060011的视图

片段生命周期中是否在onAttach上调用?

究竟什么时候onAttach在Fragment-Activity生命周期中被调用? 我知道片段生命周期,但到底是什么时候? 是在启动片段对象还是调用片段管理器时?

ViewPager中的部分片段在屏幕底部被截断(Android)

我为我的视图定义了一个基本的协调器布局: 我的视图分页器中有多个选项卡。 我发布了一个简单的片段: 会发生什么是FAB离开屏幕。 它不是FAB,但其他具有cardviews / listview的片段在屏幕底部被截断。 我四处寻找解决方案,并提出了一个hacky解决方案: 从工具栏中删除属性app:layout_scrollFlags =“scroll | enterAlways” 。 我无法理解可能导致这种情况发生的原因,以及如何解决上述问题解决了这个问题。 它是支持库中的一些错误吗? 有没有更好的方法来解决这个问题? 我遇到的另一个解决方案是从这里开始 – 将FAB按钮直接保持在活动中的Coordinator布局下,并使其仅在您需要的片段中可见。 对我来说似乎不是一个好的解决方案。 此外,我片段中的其他观点也被切断了。

检测片段何时可​​见

为什么不重复:建议的post仅适用于viewpager,或者调用onResume时。 我有一个listfragment和一个detailfragment。 单击列表项时将打开详细信息片段。 我通过隐藏listfragment并显示detailfragment来实现这一目标。 当用户返回时,他返回到listfragment。 如何检测用户何时返回我的片段,或者我的片段何时可​​见? 请注意,我想继续使用.hide()和show(),并且我正在寻找一个监听器或onVisible来检查片段何时 变得可见,而不是检查它是否可见的方法。

android.support.v4.Fragment上的3D翻转animation

我目前正在阅读本教程: http://developer.android.com/training/animation/cardflip.html 关于片段的翻转animation 。 不幸的是, object-animator只适用于android.app.Fragment,而不支持Fragment。 我尝试使用缩放和旋转animation重建.xmlanimation。 但是现在animation没有被执行,并且在我设置animation.xml文件的时间过去之后,出现了另一个片段,而不是翻转。 我是否只是在实施.xmlanimation时犯了错误? 或者没有对象animation师不可能做3D翻转animation? 或者是不可能使用支持Fragment进行3D翻转animation? 这是我的.xmlanimation:flip_left_in.xml flip_left_out.xml flip_right_in.xml flip_right_out.xml 以下是执行它们的代码: FragmentTransaction trans = getActivity().getSupportFragmentManager().beginTransaction(); trans.setCustomAnimations(R.anim.flip_right_in, R.anim.flip_right_out, R.anim.flip_left_in, R.anim.flip_left_out); trans.addToBackStack(null); trans.replace(R.id.content_frame, new MyFragment()).commit();

VideoView内部片段导致黑屏轻弹

我们在Android API 4.0上运行了一个Android应用程序。 其中一个活动的布局将屏幕分为两部分。 在左侧,我们有一个带有一些按钮的静态部分。 在右侧,我们有一个FrameLayout,它将根据按下的按钮切换到相应的片段。 问题:右侧的一个片段包含VideoView。 当用户点击按钮显示该片段时,显示片段并且video立即开始播放:在渲染该片段时,整个屏幕以黑色闪烁,这非常烦人。 以下是VideoFragment类的一些代码: public class VideoFragment extends Fragment { public VideoView videoView; private ExternalVideo mVideo; private boolean mVideoExists; private String mDestination; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDestination = ApplicationParams.MEDIA_STORAGE_PATH + “videos/” + FilenameUtils.getBaseName(((DetailActivity)getActivity()).getProduct().getVideoUrl()) + “.” + FilenameUtils.getExtension(((DetailActivity) getActivity()).getProduct().getVideoUrl()); File file = new File(mDestination); mVideoExists = file.exists() && […]

片段标签的使用

在Android中,您可以在FragmentTransaction中为Fragment设置标记。 为什么我需要为片段设置标签? 如果Fragment根据其标记更改其行为,这是一种好习惯吗?

fragmentTransaction.add和fragmentTransaction.replace之间的区别

我所知道的是: 在fragmentTransaction.replace() ,将调用当前片段的onStop()函数,而fragmentTransaction.add()则不会。 并在调用fragMgr.popBackStack(); ,我们将返回前一个片段,无论使用fragmentTransaction.replace还是fragmentTransaction.add() 那么fragmentTransaction.replace做了什么? 我可以理解我们可以“添加”一个片段opon一个前一个片段然后通过popBackStack()返回到前一个片段,但是: 如果先前的片段被当前片段“替换” ,我想先前的片段被删除并且当前片段被添加进来,当popBackStack()调用时,它如何返回到先前的片段?

如何从View中获取Fragment?

我在TableLayout添加了一些Fragment ,我想从容器Activity管理它们,所以我使用了这个: Fragment fragment = (Fragment) tableLayout.getChildAt(i); 但getChildAt(int)返回一个View而View无法转换为Fragment

从BackStack中保留ViewPager中的Fragment时重新加载WebView

这是包含WebView的基本Fragment的代码。 WebFragment.java public class WebFragment extends Fragment { String TAG = “WebFragment”; private WebView webView; private String currentUrl = “http://www.google.com”; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.webview_layout, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); webView = (WebView) getView().findViewById(R.id.helloWebview); initWebView(); webView.loadUrl(currentUrl); } @SuppressLint(“SetJavaScriptEnabled”) private void initWebView() { webView.getSettings().setJavaScriptEnabled(true); webView.addJavascriptInterface(new […]