首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
首页标签生命周期

#生命周期

大家物联网卡怎么管理呢?ICCID号怎么读取呢?

konaJDK LTS周期?

为什么我setdata中的数组p1前端没显示?

ViewPager和片段 - 存储片段状态的正确方法是什么?

嗨喽你好摩羯座
我想提供一个可扩展的解决方案antonyt的精彩的回答和压倒一切的提FragmentPageAdapter.instantiateItem(View, int)保存到创建的引用Fragments,所以你可以对他们以后做的工作。这也应该与FragmentStatePagerAdapter; 请参阅说明的细节。 下面是一个简单的例子,如何得到一个不依赖于内部设置的Fragments返回的引用。关键是重写和保存在那里的引用,而不是在。 FragmentPagerAdaptertagsFragmentsinstantiateItem()getItem() public class SomeActivity extends Activity { private FragmentA m1stFragment; private FragmentB m2ndFragment; // other code in your Activity... private class CustomPagerAdapter extends FragmentPagerAdapter { // other code in your custom FragmentPagerAdapter... public CustomPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { // Do NOT try to save references to the Fragments in getItem(), // because getItem() is not always called. If the Fragment // was already created then it will be retrieved from the FragmentMange // and not here (i.e. getItem() won't be called again). switch (position) { case 0: return new FragmentA(); case 1: return new FragmentB(); default: // This should never happen. Always account for each position above return null; } } // Here we can finally safely save a reference to the created // Fragment, no matter where it came from (either getItem() o // FragmentManger). Simply save the returned Fragment from // super.instantiateItem() into an appropriate reference depending // on the ViewPager position. @Override public Object instantiateItem(ViewGroup container, int position) { Fragment createdFragment = (Fragment) super.instantiateItem(container, position); // save the appropriate reference depending on position switch (position) { case 0: m1stFragment = (FragmentA) createdFragment; break; case 1: m2ndFragment = (FragmentB) createdFragment; break; } return createdFragment; } } public void someMethod() { // do work on the referenced Fragments, but first check if they // even exist yet, otherwise you'll get an NPE. if (m1stFragment != null) { // m1stFragment.doWork(); } if (m2ndFragment != null) { // m2ndFragment.doSomeWorkToo(); } } } 或者如果你喜欢使用tags而不是类成员变量/引用,Fragments你也可以以相同的方式抓取tags设置FragmentPagerAdapter:注意:这不适用于创建它时FragmentStatePagerAdapter不设置。tagsFragments @Override public Object instantiateItem(ViewGroup container, int position) { Fragment createdFragment = (Fragment) super.instantiateItem(container, position); // get the tags set by FragmentPagerAdapte switch (position) { case 0: String firstTag = createdFragment.getTag(); break; case 1: String secondTag = createdFragment.getTag(); break; } // ... save the tags somewhere so you can reference them late return createdFragment; } 请注意,此方法不依赖于模拟内部tag集合FragmentPagerAdapter,而是使用适当的API来检索它们。这样即使tag未来版本的变化SupportLibrary仍然安全。 不要忘记,根据你的设计Activity,Fragments你正在努力的工作可能还可能不存在,所以你必须null在使用你的参考之前通过检查进行解释。 另外,如果你正在使用FragmentStatePagerAdapter,那么你不想保留对你的强硬引用,Fragments因为你可能有很多这样的引用,而且硬引用会不必要地把它们留在内存中。而应将其保存Fragment在WeakReference变量中而不是标准中。喜欢这个: WeakReference<Fragment> m1stFragment = new WeakReference<Fragment>(createdFragment); // ...and access them like so Fragment firstFragment = m1stFragment.get(); if (firstFragment != null) { // reference hasn't been cleared yet; do work... }... 展开详请
我想提供一个可扩展的解决方案antonyt的精彩的回答和压倒一切的提FragmentPageAdapter.instantiateItem(View, int)保存到创建的引用Fragments,所以你可以对他们以后做的工作。这也应该与FragmentStatePagerAdapter; 请参阅说明的细节。 下面是一个简单的例子,如何得到一个不依赖于内部设置的Fragments返回的引用。关键是重写和保存在那里的引用,而不是在。 FragmentPagerAdaptertagsFragmentsinstantiateItem()getItem() public class SomeActivity extends Activity { private FragmentA m1stFragment; private FragmentB m2ndFragment; // other code in your Activity... private class CustomPagerAdapter extends FragmentPagerAdapter { // other code in your custom FragmentPagerAdapter... public CustomPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { // Do NOT try to save references to the Fragments in getItem(), // because getItem() is not always called. If the Fragment // was already created then it will be retrieved from the FragmentMange // and not here (i.e. getItem() won't be called again). switch (position) { case 0: return new FragmentA(); case 1: return new FragmentB(); default: // This should never happen. Always account for each position above return null; } } // Here we can finally safely save a reference to the created // Fragment, no matter where it came from (either getItem() o // FragmentManger). Simply save the returned Fragment from // super.instantiateItem() into an appropriate reference depending // on the ViewPager position. @Override public Object instantiateItem(ViewGroup container, int position) { Fragment createdFragment = (Fragment) super.instantiateItem(container, position); // save the appropriate reference depending on position switch (position) { case 0: m1stFragment = (FragmentA) createdFragment; break; case 1: m2ndFragment = (FragmentB) createdFragment; break; } return createdFragment; } } public void someMethod() { // do work on the referenced Fragments, but first check if they // even exist yet, otherwise you'll get an NPE. if (m1stFragment != null) { // m1stFragment.doWork(); } if (m2ndFragment != null) { // m2ndFragment.doSomeWorkToo(); } } } 或者如果你喜欢使用tags而不是类成员变量/引用,Fragments你也可以以相同的方式抓取tags设置FragmentPagerAdapter:注意:这不适用于创建它时FragmentStatePagerAdapter不设置。tagsFragments @Override public Object instantiateItem(ViewGroup container, int position) { Fragment createdFragment = (Fragment) super.instantiateItem(container, position); // get the tags set by FragmentPagerAdapte switch (position) { case 0: String firstTag = createdFragment.getTag(); break; case 1: String secondTag = createdFragment.getTag(); break; } // ... save the tags somewhere so you can reference them late return createdFragment; } 请注意,此方法不依赖于模拟内部tag集合FragmentPagerAdapter,而是使用适当的API来检索它们。这样即使tag未来版本的变化SupportLibrary仍然安全。 不要忘记,根据你的设计Activity,Fragments你正在努力的工作可能还可能不存在,所以你必须null在使用你的参考之前通过检查进行解释。 另外,如果你正在使用FragmentStatePagerAdapter,那么你不想保留对你的强硬引用,Fragments因为你可能有很多这样的引用,而且硬引用会不必要地把它们留在内存中。而应将其保存Fragment在WeakReference变量中而不是标准中。喜欢这个: WeakReference<Fragment> m1stFragment = new WeakReference<Fragment>(createdFragment); // ...and access them like so Fragment firstFragment = m1stFragment.get(); if (firstFragment != null) { // reference hasn't been cleared yet; do work... }
领券