【问题标题】:ViewPager with FragmentPageAdater not working properly?带有 FragmentPageAdater 的 ViewPager 无法正常工作?
【发布时间】:2014-07-22 12:13:29
【问题描述】:

我有一个扩展 ActionBarActivity 的活动,并且活动在 xml 中有以下代码。

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

它只有 ViewPager。我想显示带有选项列表的图像,因此我选择创建一个带有布局的片段,我希望将其显示为 ViewPager 的一部分。

我创建了一个扩展 FragmentPagerAdapter 的适配器,如下所示:

私有类 CategoryViewPagerAdapter 扩展 FragmentStatePagerAdapter {

public CategoryViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int currentPosition) {

            return FullScreenFragment.newInstance(fragments
                    .get(currentPosition));
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return fragments.size();
        }

    }

fragments 是字符串列表。

它加载图像和滑动也可以,但是显示的图像具有上一张图像的标题。 这个标题基本上是在ActionBar中为那个片段设置的。

在我的片段类中,我这样做了:

parentActivity = (ActionBarActivity) getActivity();
        parentActivity.getSupportActionBar().setDisplayOptions(
                ActionBar.DISPLAY_SHOW_CUSTOM);
        parentActivity.getSupportActionBar().setCustomView(
                R.layout.full_screen_action_bar);

而且有时在片段布局中的少数组件不会在单击片段内的按钮时呈现。我是否需要从 Activity 或 Fragment rootView 中查找 ID

【问题讨论】:

    标签: android android-fragments android-viewpager fragmentpageradapter


    【解决方案1】:

    使用此方法更新操作栏

        vp.setOnPageChangeListener(new OnPageChangeListener()
        {
    
            @Override
            public void onPageSelected(int arg0)
            {
              //update action bar 
    
            }
    
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2)
            {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void onPageScrollStateChanged(int arg0)
            {
                // TODO Auto-generated method stub
    
            }
        });
    

    关于第二个问题,请提供更多信息。

    【讨论】:

    • 假设我有五个图像 url。所以我在一个 url 之后创建了具有五个实​​例的相同片段。在片段 onCreateView 中,我正在从服务器加载该 url 的信息,例如图像名称等...当 ViewPager 最终得到渲染时,它显示图像但是错误的图像名称显示在操作栏中,它显示了列表中的前一个项目图像....而且当我滑动时,我希望片段始终具有其初始视图,而不是查看哪个执行操作后更改