Tag: android fragments

从片段开始活动导致NullPointerException

我在这里卡住了一个问题,从一个片段内的button开始一个活动。 这是我的代码: ViewPagerAdapter.java import java.util.List; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; public class ViewPagerAdapter extends FragmentPagerAdapter { private List<Fragment> fragments; public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) { super(fm); this.fragments = fragments; } @Override public int getCount() { return this.fragments.size(); } @Override public Fragment getItem(int position) { return this.fragments.get(position); } } ViewPagerActivity.java import java.util.List; import java.util.Vector; import […]

ViewPager作为循环队列/包装

我正在使用ViewPager和FragmentStatePagerAdapter来允许在一些片段之间导航。 假设我有三个片段: A , B和C ViewPager最初显示片段A,并允许您通过从右向左滑动导航到片段B,然后再次滑动到片段C. 这允许以下导航path: A <–> B <–> C 我希望能够在片段A上从左到右滑动,并让ViewPager显示片段C,也就是让它看起来像循环队列,并允许… –> C <–> A <–> B <–> C <–> A <– … 我不希望碎片在其他位置重复(即结束超过三个实例)。 这个包装function可能与ViewPager?

如何通过旋转正确保留一个DialogFragment?

我有一个FragmentActivity托pipe一个DialogFragment。 DialogFragment执行networking请求并处理Facebook身份validation,所以我需要在轮换期间保留它。 我已经阅读了与这个问题有关的所有其他问题,但是没有一个真正解决了这个问题。 我使用putFragment和getFragment来保存Fragment实例,并在活动重新创build期间再次获取它。 但是,我总是在onRestoreInstanceState调用getFragment时得到一个空指针exception。 我也想保持对话在轮换期间不被解雇,但是到目前为止我甚至不能保留它的实例。 任何想法出了什么问题? 这是我的代码目前的样子: public class OKLoginActivity extends FragmentActivity implements OKLoginDialogListener { private OKLoginFragment loginDialog; private static final String TAG_LOGINFRAGMENT = "OKLoginFragment"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FragmentManager fm = getSupportFragmentManager(); if(savedInstanceState == null) { loginDialog = new OKLoginFragment(); loginDialog.show(fm, TAG_LOGINFRAGMENT); } } @Override public void onSaveInstanceState(Bundle outState) { […]

如何使用Fragment的数据绑定

我试图从官方的谷歌文档https://developer.android.com/tools/data-binding/guide.html数据绑定的例子 除了我试图将数据绑定应用于片段而不是活动。 我正在编译的错误 Error:(37, 27) No resource type specified (at 'text' with value '@{marsdata.martianSols}. onCreate的片段如下所示: @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); MartianDataBinding binding = MartianDataBinding.inflate(getActivity().getLayoutInflater()); binding.setMarsdata(this); } onCreateView的片段看起来像这样: @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.martian_data, container, false); } 部分我的布局文件的片段如下所示: <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> […]

当ViewPager的父代片段隐藏然后显示ViewPager的片段的视图丢失

我已经看到我的ViewPager与我自己的FragmentStatePagerAdapter一些奇怪的行为。 我的视图层次结构如下所示: -> (1) Fragment root view (RelativeLayout) -> (2) ViewPager -> (3) ViewPager's current fragment view 当负责碎片根视图(1)的碎片被隐藏(在片段事务中使用.hide()),然后显示(使用.show())时,当前显示在ViewPager(3 )变成空,虽然片段仍然存在。 基本上,我的ViewPager变得完全空白/透明。 我发现解决这个问题的唯一方法就是打电话 int current = myViewPager.getCurrentItem(); myViewPager.setAdapter(myAdapter); myViewPager.setCurrentItem(current); 显示父代片段之后。 这以某种方式触发视图被重新创build并出现在屏幕上。 不幸的是,这偶尔会导致exception处理寻呼机适配器在旧的观察者上调用两次unregisterDataSetObserver() 。 有一个更好的方法吗? 我想我问的是: 为什么ViewPager中的片段视图在ViewPager的父片段被隐藏时会被破坏? 更新:当应用程序“最小化”,然后“恢复”(通过按住home键,然后返回),也会发生这种情况。 每个请求,这是我的寻呼机适配器类: public class MyInfoSlidePagerAdapter extends FragmentStatePagerAdapter { private ArrayList<MyInfo> infos = new ArrayList<MyInfo>(); public MyInfoSlidePagerAdapter (FragmentManager fm) { super(fm); } […]

GLSurfaceView里面片段重新启动时不能渲染

我有一个GLSurfaceView设置和呈现预期使用GLSurfaceView.Renderer 。 我的应用程序使用Android支持包中的片段。 当我导航到一个新的片段surfaceDestroyed被调用,但是当我通过backstack回到片段GLSurfaceView将不呈现,调用requestRender不会导致onDraw调用。 我知道我需要在表面视图上调用onResume和onPause ,并从托pipe片段执行此操作,但似乎无法解决问题。 所有关于htis方法的例子都是指活动,这可能是问题吗? 如果是这样的话,你如何在片段中使用GLSurfaceView 。 任何洞察力非常感谢,我很高兴张贴代码,但它似乎是更多的一个普遍的问题, 谢谢

有没有一种方法像结果起始片段一样工作?

我现在有一个覆盖片段。 这是为了login到服务。 在电话应用程序中,我想要在叠加层中显示的每个步骤都是他们自己的屏幕和活动。 有三个部分的login过程,每个都有自己的活动,这是用startActivityForResult()调用的。 现在我想用碎片和叠加层来做同样的事情。 叠加层将显示与每个活动对应的片段。 问题是这些片段被托pipe在Honeycomb API中的活动中。 我可以得到第一个片段的工作,但是我需要startActivityForResult(),这是不可能的。 是否有startFragmentForResult()的行,我可以开始一个新的片段,当它完成了它返回一个结果到前一个片段?

为什么使用碎片?

使用Fragment比使用在不同布局中重用的自定义View有什么优势? 在原来的博客文章介绍片段 ,黛安娜哈克博恩说 [Fragments]使开发人员可以更轻松地编写可在各种屏幕尺寸范围内扩展的应用程序,而不仅仅是平台中已有的function。 然后她继续在为应用程序制作平板电脑布局的上下文中解释片段,该应用程序结合了来自同一应用程序的电话版本的两个活动的UI。 但似乎使用自定义视图可以实现相同的重用。 片段和观点之间的主要区别似乎是它们有不同的生命周期。 Fragment生命周期是: onAttach() , onCreate() , onCreateView() , onActivityCreated() , onStart() , onResume() , onPause() , onStop() , onDestroyView() , onDestroy() , onDetatch() 。 View生命周期是: onFinishInflate() , onAttachedToWindow() , onMeasure() , onLayout() , onDetatchedFromWindow() 我想听听有开发经验的开发人员编写大型应用程序,了解他们在使用片段vs自定义视图中看到的好处(如果有的话),将UI划分为可重用的片断。

片段交易animation:滑入并滑出

我已经检查了片段之间的animation事务的一些教程。 我用这个方法做animation: fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 它的工作。 但是我希望animation是反转的:旧的片段向左滑动,新的片段向右滑动,但没有任何R.anim文件的值似乎对我的范围有用。 我该怎么做?

Android FragmentTransaction自定义animation(未知animation名称:翻译)

我试图得到一个自定义的animation来处理我的片段。 我已经按照在线教程,但我已经得到了以下错误: java.lang.RuntimeException:未知的animation名称:translate 下面是animation的XML: <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100%" android:toXDelta="0" android:duration="300" /> </set> Java文件如下所示: public void goCategory(View v) { FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(R.animator.anim_in_left, R.animator.anim_out_left); ft.show(fragment); ft.commit(); } 我无法理解其他线程中的解决scheme。 如果有人能为我贬低它,我真的很感激它。 谢谢