繁体   English   中英

ViewPager中的Android ViewPager

[英]Android ViewPager inside ViewPager

我目前面临将一个ViewPager放在另一个可滑动的另一个ViewPager内的问题。 我成功创建了第一个ViewPager,它包含三页,中间是第二个(内部)ViewPager,其中包含三页。

| ACTIVITY-1 | VIEWPAGER | ACTIVITY-1 |
         | AC1 | AC2 | AC3 |

父ViewPager可以很好地滑动,但是内部ViewPager无法显示内部活动,因此也无法滑动。

父ViewPager:

public class MainSlider extends ActionBarActivity {

SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_slider);

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);        

}

关联的XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
 tools:context="com.example.slidingapp.MainSlider" >

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

适配器ViewPager:

    public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        return PlaceholderFragment.newInstance(position + 1);
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }
}

还有片段:

   public static class PlaceholderFragment extends Fragment {

    private static final String ARG_SECTION_NUMBER = "section_number";

    public static PlaceholderFragment newInstance(int sectionNumber) {
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView;
        Bundle args = getArguments();

        switch (args.getInt(ARG_SECTION_NUMBER)) {
        case 1:
             rootView = inflater.inflate(R.layout.activity_first_page, container, false);
            break;
        case 2:
             rootView = inflater.inflate(R.layout.activity_second_swap, container, false);
            break;
        case 3:
             rootView = inflater.inflate(R.layout.activity_third_page, container, false);
            break;
        default:
             rootView = inflater.inflate(R.layout.fragment_main_slider, container, false);
            break;
        }

        return rootView;
    }
}    

子片段的代码与父片段的代码相同,请为子ViewPager提供任何解决方案,因为它无法加载内部的任何活动。

如果是嵌套的viewPager,则如果您的子viewpager不可见或无法正确滚动,请使用getChildFragmentAdapter()初始化子viewpager(pagerAdaper类)。

您可以在另一个Viewpager中显示一个ViewPager。您所要做的就是,假设您有三个选项卡,并且要在第二个片段中显示您的内部viewapager,这是在fragment2的onCreateView中编写的代码:

viewpager=(ViewPager)getActivity().findViewById(R.id.innerpager);
    Innerpager innerpagerr = new Innerpager(getActivity().getSupportFragmentManager());
    viewpager.setAdapter(innerpagerr);
    viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

}

以及要在innerViewpager片段中显示的内容,请分别为每个片段设计布局。在FragmentpagerAdpater类中将以下代码编写为:

public class Innerpager extends FragmentStatePagerAdapter {
private Context _context;
int num_of_frags = 2;


public Innerpager(FragmentManager fm) {
    super(fm);

}

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0: // Fragment # 0 - This will show FirstFragment
            return Innerlist.newInstance(0, "one");
        case 1: // Fragment # 0 - This will show FirstFragment different title
            return Innerlist2.newInstance(1, "two");
        case 2: // Fragment # 1 - This will show SecondFragment
            return Innerlist2.newInstance(2, "Page # 3");
        default:
            return null;
    }
}


@Override
public int getCount() {
    return num_of_frags;
}}

在片段中创建每个片段的新实例,如下所示:

 public static Innerlist newInstance(int page, String title) {
    Innerlist fragmentFirst = new Innerlist();
    Bundle args = new Bundle();
    args.putInt("100", page);
    args.putString("one", title);
    fragmentFirst.setArguments(args);
    return fragmentFirst;
}

而已!! 现在,您作为Viewpager的主要活动将控制三个片段,即fragment1,fragment2,fragment3和fragment2内部,您具有上面的代码。希望对您有所帮助。编码愉快!

我认为不可能在视图分页器中插入视图分页器,因为我们不能同时提供滚动。 您需要为内部寻呼机创建自定义视图。 您可以在这里找到更好的解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM