Tag: android viewpager

更改ViewPager以启用无限页面滚动

Jon Willis已经发布了如何使用他的代码无限滚动。 在那里他说,他在Android支持库中的ViewPager类中做了一些改变。 已经做了哪些更改以及如何使用ViewPager更改来重新编译库?

dynamic添加和删除视图到viewpager

(我想出了一个解决scheme – 请在下面的答案部分看到我的post。) 在我的应用程序中,用户将从一个单一的数据视图开始。 我想添加一个ViewPager并允许用户根据需要添加更多的视图。 我如何做到这一点? (我不'想要使用FragmentPagerAdapter。) 我读过无数的post和概述,但仍然缺less一些东西。 这是我想我明白的: MainActivity创build一个ViewPager和PagerAdapter: ViewPager pager = null; MainPagerAdapter adapter = null; public void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); pager = new ViewPager (this); setContentView (pager); adapter = new MainPagerAdapter(); pager.setAdapter (adapter); View v0 = code_to_create_initial_view(); adapter.add (v0, 0); } 使用PagerAdapter提供视图集。 为此,我似乎需要添加和删除视图的方法,像这样的东西; 显然更多的是需要告诉ViewPager的东西已经改变,以及如何显示更改: class MainPagerAdapter extends PagerAdapter { […]

FragmentPagerAdapter和FragmentStatePagerAdapter之间的区别

FragmentPagerAdapter和FragmentStatePagerAdapter什么区别? 关于FragmentPagerAdapter Google的指南说: 这个版本的寻呼机最适合用于有less量通常需要寻呼的静态片段,比如一组选项卡。 用户访问的每个页面的片段将保存在内存中,尽pipe其视图层次可能在不可见时被破坏。 这可能会导致使用大量的内存,因为片段实例可以保持任意数量的状态。 对于更大的页面集,请考虑FragmentStatePagerAdapter。 而关于FragmentStatePagerAdapter : 当有大量的页面时,这个版本的寻呼机更加有用,更像是一个列表视图。 当页面对用户不可见时,它们的整个片段可能被破坏,只保留该片段的保存状态。 与FragmentPagerAdapter相比,这允许寻呼机保持与每个被访问页面相关的更less的存储器,代价是在页面之间切换时可能会有更多的开销。 所以我只有3个片段。 但是它们都是一个单独的模块,具有大量的数据。 Fragment1处理一些数据(用户input),并通过活动传递给Fragment2 ,这只是简单的ListFragment 。 Fragment3也是ListFragment 。 所以我的问题是 :我应该使用哪个适配器? FragmentPagerAdapter或FragmentStatePagerAdapter ? 我将非常感谢您的帮助。 亚历克斯。 PS对不起,我的英文:)

ViewPager.setOffscreenPageLimit(0)不能按预期方式工作

我在ViewPager实例中使用的片段资源密集,所以我只想一次加载一个。 当我尝试以下: mViewPager.setOffscreenPageLimit(0); mViewPager.setAdapter(mPagerAdapter); 我的FragmentStatePagerAdapter.getItem(int position)覆盖函数被调用3次,这是我调用mViewPager.setOffscreenPageLimit(1)时发生的事情。 我希望它只能被调用一次,因为我指定了0离屏页面。 我相信我正确调用一切,因为如果我调用mViewPager.setOffscreenPageLimit(2) , FragmentStatePagerAdapter.getItem(int position)被调用5次,我所期望的。 ViewPager是否需要至less1个屏幕外的页面,或者我在这里做错了什么?

在Android中从ViewPager中移除碎片页面

我试图从ViewPagerdynamic添加和删除碎片,添加工作没有任何问题,但删除不能按预期工作。 每次我想删除当前项目,最后一个被删除。 我也尝试在适配器的getItemPosition方法中使用FragmentStatePagerAdapter或返回POSITION_NONE。 我究竟做错了什么? 这是一个基本的例子: MainActivity.java public class MainActivity extends FragmentActivity implements TextProvider { private Button mAdd; private Button mRemove; private ViewPager mPager; private MyPagerAdapter mAdapter; private ArrayList<String> mEntries = new ArrayList<String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mEntries.add("pos 1"); mEntries.add("pos 2"); mEntries.add("pos 3"); mEntries.add("pos 4"); mEntries.add("pos 5"); mAdd = (Button) findViewById(R.id.add); mRemove […]

在ViewPager中使用选项卡时,出现错误“Java.lang.IllegalStateException活动已被破坏”

我有一个应用程序,包括使用ActionBarSherlock在标签mode.I有5个选项卡,每个选项卡的内容是使用片段处理。 对于tab2,虽然我有一个片段的XML文件,其中包含一个ViewPager元素,而该元素又有一些片段页面。 当我最初启动应用程序的应用程序,我可以切换标签没有问题,但当我第二次按tab2我得到上面提到的错误。 主要活动如下: public class MainActivity extends SherlockFragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getSupportActionBar(); ActionBar.Tab tab1 = actionBar.newTab().setText("Tab1"); ActionBar.Tab tab3 = actionBar.newTab().setText("Tab3"); ActionBar.Tab tab2 = actionBar.newTab().setText("Tab2"); ActionBar.Tab tab4 = actionBar.newTab().setText("Tab4"); ActionBar.Tab tab5 = actionBar.newTab().setText("Tab5"); Fragment fragment1 = new Tab1(); Fragment fragment3 = new Tab3(); Fragment fragment2 = […]

IllegalStateException:使用ViewPager执行onSaveInstanceState后无法执行此操作

我从市场上的应用程序获取用户报告,提供以下例外情况: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109) at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399) at android.app.Activity.onBackPressed(Activity.java:2066) at android.app.Activity.onKeyUp(Activity.java:2044) at android.view.KeyEvent.dispatch(KeyEvent.java:2529) at android.app.Activity.dispatchKeyEvent(Activity.java:2274) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1855) at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1277) at android.app.Activity.dispatchKeyEvent(Activity.java:2269) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.widget.TabHost.dispatchKeyEvent(TabHost.java:297) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1855) […]

将ListFragment中的数据更新为ViewPager的一部分

我在Android中使用v4兼容性ViewPager。 我的FragmentActivity有一堆数据,这些数据将以不同的方式显示在ViewPager的不同页面上。 到目前为止,我只有3个相同的ListFragment实例,但将来我会有3个不同的ListFragments实例。 ViewPager在垂直电话屏幕上,列表不是并排的。 现在,ListFragment上的一个button启动一个单独的整页活动(通过FragmentActivity),返回FragmentActivity修改数据并保存,然后尝试更新其ViewPager中的所有视图。 就在这里,我被卡住了。 public class ProgressMainActivity extends FragmentActivity { MyAdapter mAdapter; ViewPager mPager; @Override public void onCreate(Bundle savedInstanceState) { … mAdapter = new MyAdapter(getSupportFragmentManager()); mPager = (ViewPager) findViewById(R.id.viewpager); mPager.setAdapter(mAdapter); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { … updateFragments(); … } public void updateFragments() { //Attempt 1: //mAdapter.notifyDataSetChanged(); //mPager.setAdapter(mAdapter); […]

如何通过在ViewPager中用手指滑动禁用分页,但仍然能够以编程方式刷卡?

我有ViewPager和它下面我有10个button。 通过点击button,例如#4,寻呼机立即通过mPager.setCurrentItem(3);立即进入第4页mPager.setCurrentItem(3); 。 但是,我想用手指水平滑动来禁用分页。 因此,只需点击button即可完成分页。 那么,我怎样才能禁用用手指划动?

dynamic更新ViewPager?

我无法更新ViewPager中的内容。 一个问题:在FragmentPagerAdapter类中,方法instantiateItem()和getItem()的关系和正确用法是什么? 我只使用getItem()来实例化并返回我的片段: @Override public Fragment getItem(int position) { return new MyFragment(context, paramters); } 这工作得很好(但据说我不能改变内容)。 所以我发现: ViewPager PagerAdapter没有更新视图 特别是在其中谈到方法instantiateItem(): “我的方法是对instantiateItem()方法中的任何实例化视图使用setTag()方法” 所以现在我想实现instantiateItem()为了做到这一点。 但我不知道我必须在那里返回(返回是Object)和getItem(int位置)的关系是什么? 目前我使用getItem来实例化片段,是不是? 但是,那么我必须把碎片放在实例variables中,或者根本不实现getItem()…? 我只是不明白这一点。 我尝试阅读参考 : public abstract Fragment getItem(int position) 返回与指定位置关联的片段。 公共对象instantiateItem(ViewGroup容器,int位置) 创build给定位置的页面。 适配器负责将视图添加到这里给出的容器,尽pipe它只能确保在从finishUpdate(ViewGroup)返回时完成。 参数 容器包含将在其中显示页面的View。 position要实例化的页面位置。 返回 返回表示新页面的Object。 这不需要是一个视图,但可以是页面的其他容器。 …但我仍然不明白他们是怎么相关的,我该怎么做。 这是我的代码。 我正在使用支持包v4。 ViewPagerTest public class ViewPagerTest extends FragmentActivity { private ViewPager pager; […]