Articles of fragmentstatepageradapter

来自FragmentStatePagerAdapter的getResources

在一个activity类中,我有这个类(来自android样本): public static class DemoCollectionPagerAdapter extends FragmentStatePagerAdapter { public DemoCollectionPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { Fragment fragment = new QuestionFragment(); Bundle args = new Bundle(); args.putInt(QuestionFragment.ARG_OBJECT, i ); fragment.setArguments(args); return fragment; } @Override public int getCount() { return questionList.length; } @Override public CharSequence getPageTitle(int position) { return "Title n°" + […]

FragmentStatePagerAdapter内存泄漏(与viewpager嵌套的片段)

我在我的适配器中有一个“内存泄漏”(引号将在后面解释)。 我目前使用嵌套的片段来承载一个viewpager。 我的设置如下: 1.活动(主pipe片段A的空活动) 2.片段A – 使用Fragmentstatepageradapter托pipeviewpager的片段。 每个viewpager页面主持片段B. 3.片段B – 包含imageview的片段。 除非发生configuration更改,否则一切都很好。 监控堆,每发生一次旋转,似乎就会增长100 kb。 手动GCing不释放内存。 我试过的东西: 1.用空片段replace片段B – 同样的问题发生,所以它不是造成问题的imageview。 2.删除片段A和B并旋转活动。 没有发生内存泄漏,所以它不是活动。 3.在任何方向改变之前和旋转约50次之后使用MAT来堆起来。 MAT显示了1个主要的嫌疑犯,这是我的适配器类。 它显示了7MB的观察者留下的堆(非常小的浅堆)如此: array java.util.ArrayList @ 0x42079938 24 7,000,832 .\mObservers android.database.DataSetObservable @ 0x42053508 16 7,000,848 ..\mObservable com.example.main.Adapter@ 0x4205a048 40 7,001,416 为什么我在片段中使用viewpager: 1.通过设置setretaininstance(true),我想保持与viewpager相关的适配器和其他variables的状态。 2.更改configuration后,我不重新创build适配器,而是使用旧的适配器连接到viewpager。 3.如果我不重复使用旧的适配器,而是在更改configuration后创build新的适配器,则内存泄漏消失。 4.closures活动并返回上一个活动后,内存泄漏也消失。 有任何想法吗? 将不胜感激任何帮助。 谢谢,JC

删除由FragmentStatePagerAdapter填充的ViewPager中的所有片段

我有一个ViewPager,我使用FragmentStatePagerAdapter填充碎片(表示来自arrayListOfObjects的对象)。 一切运作良好: mMyFragmentPagerAdapter = new fragmentAdapter(getSupportFragmentManager(),orientation ,rePopulatedfireInfoList); mPager = (ViewPager)findViewById(R.id.fireInfoFragment_container); initButton(); setTab(); mPager.setAdapter(mMyFragmentPagerAdapter); 片段适配器扩展FragmentStatePagerAdapter。 从主要活动中,我发起了一个对话主题活动; 用户可以添加一个新的最爱位置,创build一个新的对象,改变主要活动传递的对象的数组列表。 这是开始对话框活动的代码; 一切工作正常: Intent locationIntent = new Intent(afisController.this, locationActivity.class); locationIntent.putExtra("firesList", new fireInfoListWrapper(arrayListOfObjects)); startActivityForResult(locationIntent,1); 浮动活动将对象添加到arrayListOfObjects中。 在主要活动的onActivityResult上,我比较了正在接收的arraListOfObjects和我发送的arraListOfObjects; 如果不同,我想完全删除viewPager的内容,并用新的arrayListOfObjects重新创build它。 这是onActivityResults: protected void onActivityResult(int requestCode, int resultCode, Intent data) { Toast.makeText(this, "Activity Results fired…" , 1500 ).show(); if ((resultCode == 0) && (data != […]

Android:ViewPager FragmentStatePagerAdapter获取当前视图

问 :如何获取ViewPager FragmentStatePagerAdapter的当前视图? 我花了将近24小时的时间在这个地方search适合的解决scheme。 获得现在的位置很简单,我已经知道了。 这是获取当前视图 。 FragmentStatePagerAdapter是必需的,而不是PagerAdapter 。 此解决scheme通过instantiateItem(View container, int position)build议setTag和findViewWithTag 。 这是为PagerAdapter。 但是在FragmentStatePagerAdapter , instantiateItem的ViewGroup参数不是 View param: instantiateItem(**ViewGroup** container, int position) 所以我希望这不是不可能的,是吗? 请帮忙!

显示的ViewPager第一个片段总是与FragmentStatePager错误

我正在尝试与PlayStore 5.1.x具有相同的view pager + tabsdevise。 这是我的布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical|center_horizontal" android:gravity="center_vertical|center_horizontal" android:orientation="vertical"> <com.astuetz.PagerSlidingTabStrip android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="50dp" android:background="@drawable/background_tabs" /> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 我的适配器: public class MainPagerAdapter extends FragmentStatePagerAdapter { private ArrayList<FakeFragment> fragments; public MainPagerAdapter(FragmentManager fm) { super(fm); // TODO Auto-generated constructor stub fragments = new ArrayList<FakeFragment>(); } @Override public […]

Android setUserVisibleHint永远不会被调用?

我需要知道什么时候我的片段可见,我正在使用setMenuVisibility,但我现在知道这不是一个好的select。 我试图在FragmentStatePagerAdapter片段上实现setUserVisibleHint,但它永远不会被调用。 import android.app.Fragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; public class Contacts extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceState); View view = inflater.inflate(R.layout.fragment_screen_contacts, container, false); return view; } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); Log.d("MyFragment", "This never shows up."); Toast.makeText(getActivity(), […]

碎片getView()总是返回null由FragmentStatePagerAdapter创build的碎片

我一直在阅读很多有关片段的内容。 发现其他人有问题检索片段视图,因为空总是返回,但没有答案解决我的问题。 我想要做的是创build一个图片库。 我有一个保存图像视图的片段。 为了显示片段,我使用了android.support.v4.view.ViewPager。 为了提供ViewPager我使用了一个android.support.v4.app.FragmentStatePagerAdapter 。 问题是,当一切都build立和图像显示,我想保存当前显示的图像到磁盘。 所以我需要得到当前片段imageview,但我不能因为fragment.getView()总是为空,与片段相关的活动也是空的,我不明白为什么。 这里有一些代码,看看有没有人可以帮忙: 这是我的片段: public class ImageViewURLFragment extends Fragment { String _url; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // The last two arguments ensure LayoutParams are inflated // properly. View rootView = new ImageViewURL(getActivity(), _url); return rootView; } public void setImageURL(String imgURL) { _url=imgURL; […]

将新适配器分配给我的ViewPager时,应用程序崩溃

当应用程序启动时,我有一个由FragmentStatePagerAdapter填充的ViewPager : ViewPager mViewPager; … @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mViewPager = (ViewPager) view.findViewById(R.id.viewpager); mViewPager.setAdapter(new PageAdapter(getChildFragmentManager())); //PageAdapter extends from FragmentStatePagerAdapter } 这工作正常,因为它应该。 现在,当用户更改应用程序的设置时,我想将一个新的适配器分配给ViewPager,如下所示: @Override public void updateObserver(SETTING_KEY key) { mViewPager.setAdapter(new PageAdapter(getChildFragmentManager())); Log.d("info", "updating"); } 不幸的是,在调用updateObserver和这个exception之后,应用程序崩溃了: 01-22 23:22:45.957:​​E / AndroidRuntime(13131):致命exception:主要01-22 23:22:45.957:​​E / AndroidRuntime(13131):java.lang.IllegalStateException:fragement不再存在的关键f0:索引0 01-22 23:22:45.957:​​E / AndroidRuntime(13131):在android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:575)01-22 23:22:45.957:​​E / AndroidRuntime 13131):在android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211)01-22 […]

在ViewPager中dynamic跳过页面

我有一个通过FragmentStatePagerAdapter持有Fragment的ViewPager 。 假设寻呼机最初拥有以下页面( Fragment s): A – B – C – D 当用户滑动时,他可以从A移动到B , B移动到C等等。但是有些情况下,当用户改变A页面上的某些选项时,他可以移动到B ,但是C : A – C – D 然后用户回到A ,修改一些东西,并重新启用B : A – B – C – D 我怎样才能达到这个非常dynamic的行为? 当用户改变某些东西,然后重新填充ViewPager ,我不能添加Fragment ,因为它很慢,打破了stream程。

在Scrollview中使用FragmentStatePagerAdapter,Viewpager的问题

我在用: 包含以编程方式添加的片段的活动布局。 父片段与视图分页器有FragmentStatePagerAdapter ,这个全部内容都在ScrollView里面。 查看传呼机充满了一些具有Recyclerview的儿童片段。 问题是: 查看寻呼机片段有一个列表,所以我必须以编程方式设置父视图寻呼机的高度。 但我不能那样做。 为此,我使用了 viewpager.getLayoutParams().height = 20000; viewpager.requestLayout();` 和 ViewGroup.LayoutParams params = viewPagerBottom.getLayoutParams(); params.height = 20000; viewPagerBottom.setLayoutParams(params); 此外,我已经尝试查看传呼机并查看传呼机碎片高度属性作为wrap_content 如果我不设置scrollview android:layout_height="match_parent"与android:fillViewport="true"不能看到查看传呼机内容。 它是父分片layout.xml。 <ScrollView style="@style/scrollDefaultStyle" android:layout_height="wrap_content" android:fillViewport="true" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TabLayout …. /> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> </ScrollView>