2014-09-11 93 views
1

我目前面临的问题与放置一个ViewPager在另一个ViewPager,都可以滑动。我已经创建了我的第一个ViewPager,它包含三个页面,中间一个是第二个(内部)ViewPager,其中包含3个页面。Android 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提供任何解决方案,因为它无法加载任何内部活动。

+0

儿童(内部)ViewPager工作正常,你的孩子viewpager(pagerAdaper类)显示活动时,我分别从父视图中运行它。 – 2014-09-11 11:13:57

+0

你解决了这个问题吗? – 2015-05-14 16:26:18

+0

你好,你正在做类似于你的事情,并得到同样的错误。你有没有设法解决你的错误? – Simon 2015-07-17 18:47:39

回答

-1

我认为它不可能在查看传呼机内插入一个视图寻呼机,因为我们不能为两者提供滚动。您需要为内部传呼机创建一个自定义视图。你可以找到更好的解决方案here

1

你可以在另一个Viewpager中显示一个ViewPager.All你需要做的是,让我们假设你有三个选项卡,你想显示你的内部viewapager在第二个片段,这里的代码是写在onCreateView fragment2的:

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片段显示,seperately设计thier布局每个FragmentpagerAdpater类fragment.Write下面的代码:

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的内部,你有上面的代码。希望这对你有帮助。快乐的编码!

2

在的情况下,嵌套viewPager,如果你的孩子viewpager不可见或不滚动正确然后初始化使用getChildFragmentAdapter()