Questions tagged «android-viewpager»

一个ViewGroup,用于管理用户可以在其间滑动的子视图的布局。

23
如何确定片段何时在ViewPager中可见
问题:片段onResume()在ViewPager之前的片段变成实际可见被激发。 例如,我有2个带有ViewPager和的片段FragmentPagerAdapter。第二个片段仅适用于授权用户,我需要让用户在该片段可见时登录(使用警报对话框)。 但是,ViewPager当第一个片段可见时,它会创建第二个片段,以便缓存第二个片段,并在用户开始滑动时使其可见。 因此,onResume()事件早在它可见之前就在第二个片段中触发。这就是为什么我试图找到一个事件,该事件在第二个片段变得可见时触发,并在适当的时候显示一个对话框。 如何才能做到这一点?

30
ViewPager PagerAdapter不更新视图
我正在使用兼容性库中的ViewPager。我成功地显示了几个可以翻页的视图。 但是,我很难弄清楚如何使用一组新的View更新ViewPager。 我已经尝试过各种方法,例如调用mAdapter.notifyDataSetChanged(),mViewPager.invalidate()甚至每次我想使用新的数据列表时都创建一个全新的适配器。 没有任何帮助,文本视图与原始数据保持不变。 更新: 我做了一个小测试项目,几乎可以更新视图了。我将在下面粘贴课程。 似乎没有更新的是第二个视图,仍然保留“ B”,在按“更新”按钮后应显示“ Y”。 public class ViewPagerBugActivity extends Activity { private ViewPager myViewPager; private List<String> data; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); data = new ArrayList<String>(); data.add("A"); data.add("B"); data.add("C"); myViewPager = (ViewPager) findViewById(R.id.my_view_pager); myViewPager.setAdapter(new MyViewPagerAdapter(this, data)); Button updateButton = (Button) findViewById(R.id.update_button); updateButton.setOnClickListener(new OnClickListener() …


30
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 …

10
ViewPager和片段—存储片段状态的正确方法是什么?
片段对于将UI逻辑分为一些模块来说似乎非常好。但是随着ViewPager它的生命周期,我仍然迷茫。因此,非常需要大师的想法! 编辑 请参阅下面的愚蠢解决方案;-) 范围 主要活动有一个ViewPager带有片段。这些片段可以为其他(子主)活动实现一些不同的逻辑,因此片段的数据通过活动内部的回调接口填充。并且所有功能在首次启动时都正常,但是! 问题 重新创建活动时(例如,在方向更改时),ViewPager的片段也是如此。代码(您将在下面找到)说,每次创建活动时,我都会尝试创建一个ViewPager与片段相同的新片段适配器(也许是问题所在),但是FragmentManager已经将所有这些片段存储在某个地方(哪里?),并且为这些人启动娱乐机制。因此,重新创建机制通过我的回调接口调用“旧的”片段的onAttach,onCreateView等,以通过Activity的实现方法来初始化数据。但是此方法指向通过Activity的onCreate方法创建的新创建的片段。 问题 也许我使用的是错误的模式,但即使是Android 3 Pro书籍也没有太多相关信息。因此,请给我一两次拳,并指出正确的方法。非常感谢! 码 主要活动 public class DashboardActivity extends BasePagerActivity implements OnMessageListActionListener { private MessagesFragment mMessagesFragment; @Override protected void onCreate(Bundle savedInstanceState) { Logger.d("Dash onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.viewpager_container); new DefaultToolbar(this); // create fragments to use mMessagesFragment = new MessagesFragment(); mStreamsFragment = new StreamsFragment(); // …

7
FragmentPagerAdapter和FragmentStatePagerAdapter有什么区别?
FragmentPagerAdapter和之间有什么区别FragmentStatePagerAdapter? 关于FragmentPagerAdapterGoogle的指南说: 此版本的分页器最适合用于少数几个通常要分页的静态片段,例如一组选项卡。用户访问的每个页面的片段都将保留在内存中,尽管其视图层次结构在不可见时可能会被破坏。由于片段实例可以保持任意数量的状态,因此这可能导致使用大量内存。对于较大的页面集,请考虑FragmentStatePagerAdapter。 关于FragmentStatePagerAdapter: 当存在大量页面(更像列表视图)时,此版本的分页器会更加有用。当页面对用户不可见时,它们的整个片段可能会被破坏,仅保留该片段的保存状态。与页面FragmentPagerAdapter之间切换时潜在的更多开销相比,这使寻呼机可以保留与每个被访问页面关联的更少的内存 。 所以我只有3个片段。但是它们都是具有大量数据的独立模块。 Fragment1处理一些数据(用户输入)并通过活动将其传递到Fragment2,这很简单ListFragment。Fragment3也是ListFragment。 所以我的问题是:应该使用哪个适配器?FragmentPagerAdapter还是FragmentStatePagerAdapter?

20
动态更新ViewPager?
我无法更新ViewPager中的内容。 FragmentPagerAdapter类中的InstantIateItem()和getItem()方法的正确用法是什么? 我仅使用getItem()实例化并返回片段: @Override public Fragment getItem(int position) { return new MyFragment(context, paramters); } 这很好。除了我不能更改内容。 所以我发现了这一点:ViewPager PagerAdapter不更新视图 “我的方法是将setTag()方法用于instantiateItem()方法中的任何实例化视图” 现在,我想实现实例化item()。但是我不知道我必须返回什么(类型为Object)以及与getItem(int position)的关系是什么? 我阅读了参考资料: 公共抽象片段getItem(int位置) 返回与指定位置关联的片段。 public Object InstantiateItem(ViewGroup容器,int位置) 创建给定位置的页面。适配器负责将视图添加到此处给定的容器中,尽管它仅必须确保在从finishUpdate(ViewGroup)返回时完成此操作。参量 container包含页面的显示视图。position要实例化的页面位置。 退货 返回表示新页面的Object。这不必是View,但可以是页面的其他容器。 但我还是不明白。 这是我的代码。我正在使用支持包v4。 ViewPagerTest public class ViewPagerTest extends FragmentActivity { private ViewPager pager; private MyFragmentAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) …

18
替换ViewPager中的片段
我试图使用片段与ViewPager使用FragmentPagerAdapter。我要实现的目标是ViewPager用另一个替换位于第一页的片段。 寻呼机由两页组成。第一个是FirstPagerFragment,第二个是SecondPagerFragment。单击第一页的按钮。我想FirstPagerFragment用NextFragment代替。 下面是我的代码。 public class FragmentPagerActivity extends FragmentActivity { static final int NUM_ITEMS = 2; MyAdapter mAdapter; ViewPager mPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_pager); mAdapter = new MyAdapter(getSupportFragmentManager()); mPager = (ViewPager) findViewById(R.id.pager); mPager.setAdapter(mAdapter); } /** * Pager Adapter */ public static class MyAdapter extends FragmentPagerAdapter { public …




30
在viewpager中获取当前的Fragment实例
以下是我的代码,3 Fragment classes每个代码都嵌入了的3个选项卡ViewPager。我有一个菜单选项。如所示onOptionsItemSelected(),通过选择一个选项,我需要更新当前可见的片段。要进行更新,我必须调用片段类中的方法。有人可以建议如何调用该方法吗? public class MainActivity extends ActionBarActivity { ViewPager ViewPager; TabsAdapter TabsAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewPager = new ViewPager(this); ViewPager.setId(R.id.pager); setContentView(ViewPager); final ActionBar bar = getSupportActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); //Attaching the Tabs to the fragment classes and setting the tab title. TabsAdapter = new TabsAdapter(this, ViewPager); TabsAdapter.addTab(bar.newTab().setText("FragmentClass1"), …

6
如何使用不同的片段/布局实现ViewPager
当我启动实现viewpager的活动时,viewpager会创建各种片段。我想为每个片段使用不同的布局,但是问题是viewpager最多只显示两个布局(1之后所有其余片段的第二个布局)。 这是SwipeActivity的代码,该代码实现了viewpager: public class SwipeActivity extends FragmentActivity { MyPageAdapter pageAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_swipe); pageAdapter = new MyPageAdapter(getSupportFragmentManager()); ViewPager pager=(ViewPager)findViewById(R.id.pager); pager.setAdapter(pageAdapter); ActionBar bar = getActionBar(); bar.setDisplayHomeAsUpEnabled(true); } /** * Custom Page adapter */ private class MyPageAdapter extends FragmentPagerAdapter { public MyPageAdapter(FragmentManager fm) { super(fm); } @Override …


3
使用ViewPager的Android.app片段与android.support.v4.app?
我对Android支持库,片段以及作为一个具体示例的ViewPager类有疑问。我的意图是创建一个功能与Android Developer网站(http://developer.android.com/training/animation/screen-slide.html或http://developer.android.com/ training / implementing-navigation / lateral.html)。在研究他们的代码时,我注意到他们利用了该android.support.v4.app库,根据我的研究,该库是访问ViewPager该类的唯一方法。 在我的情况下,我对向后兼容性没有兴趣。最低API级别是14(冰淇淋三明治),构建目标是4.2软糖。以最简单的形式,我的应用程序执行的功能与我在Android开发人员网站上链接的第二个演示程序完全相同-只需在三个包含内容的选项卡之间滑动即可。 我读过的所有文章/帖子/答案似乎都非常支持v4支持库。现在是我的问题,尽管问题long之以鼻: 构造应用程序的最佳方法是什么-使用android.support.v4.app,从而使用SupportFragments,或使用其中提供的Fragments- android.app为什么? 如果“碎片来源” android.app是解决之道,那么最佳的解决方法是ViewPagers什么? 如果SupportFragments最适合该任务,我估计它们具有与其他功能相同的功能-那么将它们完全包含在内部的目的是什么android.app? 希望有一个更清晰的了解的人可以给我一些澄清,因为我感到困惑。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.