2017-08-08 50 views
1

我试图做一个活动,其中包含多个View添加到ScrollView内部的LinearLayout.This视图的布局文件充满了LayoutInflater,并且它们包含TextView和ViewPager(使用FragmentPagerAdapter)。问题是只有第一个ViewPager显示片段,其他ViewPage只是空的。与几个ViewPagers做活动

MainActivity.class:

public class MainActivity extends AppCompatActivity { 

    ViewPager viewPager; 
    LinearLayout linearLayout; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     linearLayout = (LinearLayout)findViewById(R.id.layout); 

     for(int i = 0;i<10;i++) { 

     PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager()); 
     pagerAdapter.addFragment(new FragmentRed()); 
     pagerAdapter.addFragment(new FragmentYellow()); 
     pagerAdapter.addFragment(new FragmentGreen()); 

     View view = getLayoutInflater().inflate(R.layout.test_item, null); 

     ViewPager viewPager = (ViewPager) view.findViewById(R.id.view_pager); 
     viewPager.setAdapter(pagerAdapter); 

     TextView textView = (TextView)view.findViewById(R.id.text_view); 
     textView.setText("SampleText " + i); 

     linearLayout.addView(view); 
    } 

    private class PagerAdapter extends FragmentPagerAdapter{ 
     ArrayList<Fragment>fragments = new ArrayList<>(); 

     public void addFragment(Fragment fragment){ 
      fragments.add(fragment); 
     } 

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

     @Override 
     public Fragment getItem(int position) { 
      return fragments.get(position); 
     } 

     @Override 
     public int getCount() { 
      return fragments.size(); 
     } 
    } 

而且这是我在模拟器获得: https://i.stack.imgur.com/SKFYM.jpg

首先ViewPager正常工作,我需要让别人这样做。

test_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:id="@+id/text_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"></TextView> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/view_pager" 
     android:layout_width="match_parent" 
     android:layout_height="100dp"></android.support.v4.view.ViewPager>> 
</LinearLayout> 

回答

0

这是很难解释,但我会尽我所能。

数组列表不能以相同的方式工作int,String,bools ...工作。如果你声明一个数组列表,你声明的方式指向相同的碎片。 ArrayList可以包含对同一个确切对象的多个引用。

我认为你会简单地解决问题:

for(int i = 0;i<10;i++) { 

     PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager()); 
     pagerAdapter.addFragment(new FragmentRed()); 
     pagerAdapter.addFragment(new FragmentYellow()); 
     pagerAdapter.addFragment(new FragmentGreen()); 

     View view = getLayoutInflater().inflate(R.layout.test_item, null); 

     ViewPager viewPager = (ViewPager) view.findViewById(R.id.view_pager); 
     viewPager.setAdapter(pagerAdapter); 

     TextView textView = (TextView)view.findViewById(R.id.text_view); 
     textView.setText("SampleText " + i); 

     linearLayout.addView(view); 
    } 
+0

谢谢回答。我按照你的建议编辑了代码,但是我仍然遇到同样的问题;只有一个viewPager在其中有片段。 –