Articles of android viewpager

如何在RecyclerView中保留ViewPager状态?

我的RecyclerView包含许多ViewPagers。 每个ViewPager中的页面数是常量(2)。 我使用PagerAdapter。 当我滚动我的RecyclerView时,ViewPagers将丢失其状态并重置为第1页。 我想知道如何保留每个ViewPager的最后一个选定页面。 例如:1)我在第一个ViewPager中滚动到第2页2)我将RecyclerView滚动到底部,我的第一个ViewPager离开了屏幕。 3)我滚动到ViewPager的顶部,因此我的第一个ViewPager再次加载。 4)我的第一个ViewPager被设置为第一页而不是我最后滚动到的第2页。 RecyclerView中有很多ViewPagers,我想保留所有状态,无论是否因为RecyclerView而重新加载。 如何解决这个逻辑?

Viewpager – 尝试catch处理,但指针索引超出范围

我收到以下exception Exception java.lang.IllegalArgumentException: pointerIndex out of range android.view.MotionEvent.nativeGetAxisValue (MotionEvent.java) android.view.MotionEvent.getX (MotionEvent.java:2141) android.support.v4.view.ViewPager.onInterceptTouchEvent (ViewPager.java:2092) android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2254) android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2711) android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2400) android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2711) android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2400) android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2711) android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2400) com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:416) com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1837) android.app.Activity.dispatchTouchEvent (Activity.java:3154) com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:378) android.view.View.dispatchPointerEvent (View.java:10177) android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:4634) android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:4502) android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:3953) android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4006) android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:3972) android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:3980) android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:3953) android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4006) android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:3972) […]

始终为索引0和1调用Viewpager Adapter getItem

我只是想知道viewpager及其适配器的正常行为是否始终为索引0和1调用getItem()方法,即使我立即设置了当前位置。 这是我的代码: mNewsPagerAdapter = new NewsDetailPagerAdapter(getChildFragmentManager()); mNewsPagerAdapter.updateNewsList(news); mViewPager = (ViewPager) mView.findViewById(R.id.horizontal_view_pager); mViewPager.setPageMargin(2); mViewPager.setPageMarginDrawable(R.color.black); mViewPager.setAdapter(mNewsPagerAdapter); mViewPager.setCurrentItem(mCurrentPositionPager, false); 如果我使用此viewpager从概览活动切换到我的详细活动,则适配器始终调用位置0和1的getItem()方法,然后mOriginalPosition及其邻居的位置的getItem()方法。 我想知道这是否是正确的行为,或者我错过了以正确的方式实现它的东西。 谢谢你的帮助 :) 编辑:添加了我的适配器代码 public class NewsDetailPagerAdapter extends FragmentStatePagerAdapter { private SparseArray mPageReferenceMap = new SparseArray(); private ArrayList mNewsList; public NewsDetailPagerAdapter(FragmentManager fm) { super(fm); } /** * Setzt die neuen News. **/ public void updateNewsList(ArrayList list) { mNewsList […]

使用View Pager进行循环滚动

我们需要将旋转轮与滑动图像进行对比 。 我已经使用了ViewPager但是在360度旋转之后 我必须从X = 0开始滚动ViewPager 。 是否有任何ViewPager在滚动到最后位置后从第一页开始? 我使用setScrollX来滚动ViewPager ,它也会在旋转animation中引入毛刺。 我希望实现像下图这样的东西。 这是示例应用程序的链接 ,只是我想要实现的最小化实现。

如何在不使用支持库的情况下实现水平滑动?

如果我不需要为旧版本的android授予支持并且只能使用API​​ 17,那么是否有另一种方法来实现广告宣传的水平滑动(如在gmail中)而不使用viewpager,fragmentactivities(新的API已经有片段。 ..)等摆脱支持库? 我发现横向滑动的所有教程都展示了如何使用支持库和FragmentActivities来完成它。 否则,如果我不能使用他们的本机类和方法,新API的优势是什么?

检测viewpager中的触摸/点击事件

我对Android开发很新,目前我正在使用viewpager,试图了解我如何处理触摸/点击事件。 我整个上午都在寻找答案,我似乎无法find任何有助于我的事情。 基本上我有一个包含5个片段的viewpager,它们都使用相同的布局。 我想要做的就是能够检测静止视图上何时有敲击/触摸(我不希望在拖动视图时发生任何检测)。 从我收集的内容来看,ViewPager默认拦截所有触摸事件似乎存在问题。 我相信这可以通过使用: myPager.requestDisallowInterceptTouchEvent(true); 起初我涉足OnTouchListener并尝试记录onTouch方法是否被击中 – 它似乎没有。 我也看到GestureDetector类作为这个问题的解决方案被抛出了很多但坦率地说我感到不知所措,我不确定我应该在这里使用哪些类/接口。 我想做的就是在使用ViewPager时选择简单的触摸/点击事件。 目前我正在使用Android开发者网站的animation教程代码的修改版本。 这是我在MainActivity.java文件中的内容: package com.example.pbinteractive; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; public class MainActivity extends FragmentActivity { /** * The number of pages (wizard steps) to show in this demo. */ private static final int NUM_PAGES […]

在画象和两个窗格的Viewpager在风景

我正在尝试实现一种布局,当设备显示在纵向上时显示视图寻呼机,并在设备处于横向时显示两个窗格。 所以我制作了两个不同的布局文件,一个只有一个ViewPager,另一个有一个LinearLayout,另一个有两个FrameLayout,我认为没有必要在这里显示它们。 两种配置还有一个布尔值hasTwoPanes 。 @Inject FragmentOne fragmentOne; @Inject FragmentTwo fragmentTwo; @Override protected void onCreate(Bundle state) { super.onCreate(state); setContentView(R.layout.activity_main); FragmentManager fm = getSupportFragmentManager(); boolean hasTwoPanes = getResources().getBoolean(R.bool.hasTwoPanes); TabLayout tabLayout = findViewById(R.id.tab_layout); ViewPager viewPager = findViewById(R.id.view_pager); if (hasTwoPanes) { tabLayout.setVisibility(View.GONE); } else { tabLayout.setVisibility(View.VISIBLE); tabLayout.setupWithViewPager(viewPager); viewPager.setAdapter(new MyPagerAdapter(fm)); } FragmentOne frag1 = (FragmentOne) fm.findFragmentByTag(getFragmentName(0)); if (frag1 != null) […]

Android:垂直viewpager中的RecyclerView

我想在垂直viewpager中实现recyclerview。 我目前的布局如下所示 VerticalViewpager – Fragment1 – ImageView – Fragment2 – RecyclerView 如果我从Fragment1滑动到Fragment2一切正常。 我可以在recyclerview中上下滚动。 如果我尝试滑动/滚动回Fragment1,则会出现此问题。 如果用户已滚动到recyclerview的顶部,我想将下一个“Up”-Scroll事件转发到垂直viewpager。 我已经尝试重写onInterceptTouchEvent方法,但遗憾的是仍然没有成功。 有什么想法吗? 谢谢你的帮助 :)

正确插入和删除片段到viewpager

我正在使用viewpager和片段制作一个adroid应用程序。 我想选择动态地向分页器添加或删除片段页面。 我有一个自定义FragmentPagerAdapter: public class MyAdapter extends FragmentPagerAdapter implements TitleProvider{ protected final List fragments; /** * @param fm * @param fragments */ public MyAdapter(FragmentManager fm, List fragments) { super(fm); this.fragments = fragments; } public void addItem(PageFragment f){ fragments.add(f); notifyDataSetChanged(); } public void addItem(int pos, PageFragment f){ for(int i=0;i=pos){ getSupportFragmentManager().beginTransaction().remove(getSupportFragmentManager().findFragmentByTag(getFragmentTag(i))).commit(); } } fragments.add(pos,f); notifyDataSetChanged(); pager.setAdapter(this); pager.setCurrentItem(pos); […]

将寻呼机视为列表视图行项

我有一个包含20行的列表视图,我想在列表视图中设置一个视图寻呼机作为每一行。 由于列表视图的行中的项目可能是一个或多个,我想使用视图寻呼机显示列表视图行项目。 为此,我使用以下代码: 自定义布局,将显示在列表视图行中(作为寻呼机项) 主列表视图具有View Pager的自定义行项目 MyPagerAdapter类 public class MyPagerAdapter extends PagerAdapter { private Context context; public MyPagerAdapter(Context context) { this.context = context; } @Override public int getCount() { return 4; } @Override public Object instantiateItem(View container, int position) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout view = inflater.inflate(R.layout.inner_layout_file, null); ((ViewPager) container).addView(view, position); return […]