Articles of android viewpager

碎片未从内存中释放

我有一个活动,其中包含一个具有适配器FragmentStatePagerAdapter的View Pager。 每次进入活动时,它将占用200mb的内存,在退回活动后(finish())然后重新输入它将附加并加倍手机上使用的内存。 在对问题进行故障排除后,似乎片段管理器没有释放片段,尽管我试图删除它们但它只是不起作用。 我尝试清空正在添加的片段以确保它不是片段内部的问题仍然存在。 我的适配器代码是 private class ChildrenPagerAdapter extends FragmentStatePagerAdapter { private List childrenBean; public ChildrenPagerAdapter(FragmentManager fm, List bean) { super(fm); this.childrenBean = bean; } @Override public int getItemPosition(Object object) { return PagerAdapter.POSITION_NONE; } @Override public Fragment getItem(int position) { ReportFragment reportFragment = new ReportFragment(); reportFragment.childBean = childrenBean.get(position); reportFragment.position = position; reportFragment.mPager = mPager; […]

如何告诉我的自定义FragmentPagerAdapter停止销毁我的碎片?

我有一个带有FragmentPagerAdapter的ViewPager,我的应用程序之前只使用了两个片段(不同types)而没有问题。 我刚刚添加了第三个片段,现在我的适配器/ viewpager似乎在我远离它们时会破坏我的碎片。 例如,如果我在第1页,第3页将被销毁并在我接近它时重新创建。 如果我在第3页,第1页也是如此。 这在我的应用中引起了很多问题。 片段根本不是RAM很重,所以我怎么能阻止这种情况发生呢?

替换已弃用的图库的选项

我目前正在使用Gallery小部件来显示缩略图的滑动列表。 每个缩略图都有背景颜色和文本覆盖。 (这是一个颜色选择器)。 但是,从API版本16开始,该库已被弃用。 。 据我了解,API版本大于16的手机不保证有图库小部件。 我会使用一个viewpager,但是它一次只显示一个视图,我也希望显示相邻的视图。 水平滚动视图可以执行此操作,但它不会像图库那样捕捉到最近的选项。 我找了现有的小部件,找不到任何东西。 您对我应该选择哪个小部件有什么建议吗?

FragmentPagerAdapter滑动以显示ListView 1/3屏幕宽度

编辑: 请参阅下面的答案 – > 我想要一个视图,当向右滑动时,会显示listView。 与新版Google Play商店中实施的内容非常相似(下面的示例图片)。 我认为它是一个ViewPager,但我尝试重复它没有占上风。 我认为可能只是’listView Page’width属性设置为特定的dp但不起作用。 我也尝试修改pakerfeldt的viewFlow并且无法弄清楚Google是如何做到这一点的 我是在正确的轨道上吗? 如果有人知道如何复制这个,我会非常感激。 我认为这可能成为在平板电脑上显示导航视图的一种流行的新方式….? 代码将是最好的帮助。 谢谢!! 向右滑动: 刷完; 布局显示列表和第二部分(完全如图所示)列表片段未填满屏幕: 当用户向左滑动时,仅显示主页面,如果用户再次向左滑动,则viewPager继续到下一页面。

ViewPager内的ScrollView会自动滚动到中间

我有一个ViewPager包含同一个片段的几个实例,这个片段包含一篇文章。 文章视图层次结构非常简单,包括标题,横幅图像,副标题和正文; 除标题之外的所有内容都包含在scrollview中。 问题是 ,当您滑动到新页面时,片段会在顶部显示视图,然后立即滚动到容器的中间。 (事实上​​,它滚动到带有id: article_content的TextView的开头) 我已在问题的底部发布了布局。 现在,ViewPager设置了一个FragmentStatePagerAdapter的简单实现,这里是代码: class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { Bundle args; int count; public ScreenSlidePagerAdapter(FragmentManager fm) { super(fm); this.count = 8; } @Override public Fragment getItem(int position) { ArticleFragment mPrimaryFragment = new ArticleFragment(); args = new Bundle(); args.putString(ArticleFragment.KEY_ARTICLE_URL, mCurArticleLink); mPrimaryFragment.setArguments(args); return mPrimaryFragment; } @Override public int getCount() { return count; […]

Android FragmentStatePagerAdapter,如何标记片段以便稍后find它

使用FragmentStatePageAdapter我得到这样的片段: @Override public Fragment getItem(int position) { return new SuperCoolFragment(); } 但是,稍后我的代码我需要find这个片段来设置属性。 在我使用片段的应用程序的其他一些部分,我基本上标记它们并使用findFragmentByTag(TAG)查找它们,但现在我不知道该怎么做。 如何使用FragmentStatePageAdapterfindFragmentStatePageAdapter ?

ScrollView中的ViewPager

我需要在ScrollView有一个ViewPager但是当它在ScrollView时, ViewPager不会出现,当我不使用ScrollView时一切正常。 我已经在stackoverflow或其他网站上看到过这样的问题,并且所有这些问题都得到了解答,你必须将android:fillViewport=”true”放到你的scrollview来修复问题,但这个解决方案不起作用对我来说,即使我的ScrollView有android:fillViewport=”true” , ViewPager仍然没有出现。 我想android api中的某些内容发生了变化,这个解决方案不再适用了,有没有人知道我怎么可能让ViewPager出现在ScrollView ? 更新:一个有效的ScrollView布局XML:

使用getItemPosition(Object object)重新排序FragmentStatePagerAdapter中的页面

我相信当重写getItemPosition(Object object)时,FragmentStatePagerAdapter的行为不正确,目的是重新排序页面。 下面是一个简单的例子。 在初始状态中,页面的顺序是{A,B,C}。 在调用toggleState() ,页面的顺序变为{A,C,B}。 通过重写getItemPosition(Object object) ,我们确保正在查看的当前页面(A,B或C)不会更改。 public static class TestPagerAdapter extends FragmentStatePagerAdapter { private boolean mState = true; public TestPagerAdapter(FragmentManager fragmentManager) { super(fragmentManager); } @Override public int getCount() { return 3; } private void toggleState() { mState = !mState; notifyDataSetChanged(); } private String getLabel(int position) { switch (position) { case 0: return […]

从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 […]

PagerAdapter中的instantiateItem(ViewGroup,int)和ViewPager中的AddView混淆

到目前为止,我一直在黑客攻击示例,以便了解Android SDK作为一个整体的API。 但是,我陷入了僵局。 我正在尝试使用XML文件中的2个TextView来为LinearLayout充气。 这些将是分页的视图。 我根本无法让这个工作,并意识到我完全不明白代码发生了什么。 查看源代码,我可以看到方法ViewPager.addNewItem从提供的适配器调用InstantiateItem。 并且在populate()调用addNewItem。 populate()在许多其他地方被调用。 无论如何,在这个例子中,我已经体验过,当为PagerAdapter重写该方法时,必须在从ViewPager作为parameter passing的ViewPager集合中包含对addView()的调用。 如果我希望添加多个视图,我认为这将是多次调用addView()的情况,但是当instantiateItem()将一个Object返回给ViewPager时(在示例中我让它返回它添加的视图)我不知道知道该返回什么。 我已经尝试返回膨胀的视图和其他一些东西。 请问有人可以解释这里发生了什么吗? 非常感激。 @Override public Object instantiateItem(View collection, int position) { layout = inflater.inflate(R.layout.animallayout, null); TextView tv = (TextView) layout.findViewById(R.id.textView1); tv.setText(“1________________>” + position); TextView tv2 = (TextView) layout.findViewById(R.id.textView2); tv.setText(“2________________>” + position); ((ViewPager) collection).addView(layout); return layout; }