2017-02-18 29 views
4

我使用ViewPager来创建向左滑动的片段,现在我希望将片段插入每个片段页面。ANDROID:ViewPager在instantiateItem方法中使用不同片段

activityMain.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    ... 
    android:orientation="vertical"> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/myviewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

    <devlight.io.library.ntb.NavigationTabBar 
     android:id="@+id/ntb_horizontal" 
     app:ntb_swiped="true"/> 


</android.support.design.widget.CoordinatorLayout> 

这: tab0_fragment.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="40dp" 
     android:textSize="30sp" 
     android:gravity="center" 
     android:id="@+id/textView" 
     android:layout_centerHorizontal="true" 
     android:textColor="@android:color/holo_green_dark" 
     android:text="Social\nFragment"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:autoLink="web" 
     android:textSize="15sp" 
     android:layout_marginTop="10dp" 
     android:layout_centerHorizontal="true" 
     android:text="androidbelieve.com" 
     android:textColor="#000" 
     android:layout_below="@+id/textView" 
     android:textStyle="italic"/> 

</RelativeLayout> 

我有一个ViewPagermainActivity.java

final ViewPager viewPager = (ViewPager) findViewById(R.id.myviewpager); 
viewPager.setAdapter(new PagerAdapter() { 
... 

... 
} 

我尝试通过片段布局在viewpager中打开一个屏幕。

我试试这个:

final ViewPager viewPager = (ViewPager) findViewById(R.id.myviewpager); 
viewPager.setAdapter(new PagerAdapter() { 
    ... 
    public Object instantiateItem(final ViewGroup container, final int position) { 
      if (position == 0) 
      { 
       final View view = LayoutInflater.from(getBaseContext()).inflate(R.layout.fragment_tab0, null, false); 
       FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.myviewpager,new tab0Fragment()).commit(); 
       container.addView(view); 
       return view; 
      } 
      else if (position == 1) 
      ... 

    } 

... 
} 

tab0Fragment.java

public class tab0Fragment extends Fragment { 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_tab0,null); 
    } 
} 

我小白的机器人。如何纠正这个代码?


解决方案: 的答案是不是我的答案,但可以帮助我很多。

根据@Mr。兔子ans @Amit Upadhyay我将顶级代码更改为:

@Override 
      public Object instantiateItem(final ViewGroup container, final int position) { 

       if (position == 0) 
       { 
        final View view = LayoutInflater.from(getBaseContext()).inflate(R.layout.fragment_tab0, null, false); 
        MyAdapter adapter = new MyAdapter(getSupportFragmentManager()); 
        adapter.addFragment(new tab0Fragment(), getResources().getString(R.string.tab0)); 
        container.addView(view); 
        return view; 
       } 
       else if (position == 1) 
       { 

并且还根据@Mr添加MyAdapter类。兔子的答案。

希望能帮助别人。

+0

https://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html –

回答

1

尝试分离出您的适配器和下面的代码。

MyAdapter.java

public class MyAdapter extends FragmentPagerAdapter{ 

    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

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

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

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


    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 

创建片段

FragmentOne.java

public class FragmentOne extends Fragment { 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_one, container, false); 
     return view; 
    } 
} 

FragmentTwo.java

public class FragmentTwo extends Fragment { 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_two, container, false); 
     return view; 
    } 
} 

设置你的viewpager像这样在你的交流tivity。

final ViewPager viewPager = (ViewPager) findViewById(R.id.myviewpager); 
    MyAdapter adapter = new MyAdapter(getSupportFragmentManager()); 

    // Add your fragments in adapter. 
    FragmentOne fragmentOne = new FragmentOne(); 
    adapter.addFragment(fragmentOne, getResources().getString(R.string.fragment_one_title)); 

    FragmentTwo fragmentTwo = new FragmentTwo(); 
    adapter.addFragment(fragmentTwo, getResources().getString(R.string.fragment_two_title)); 

    viewPager.setAdapter(adapter); 

然后最后用您的ViewPager设置您的NavigationTabBar。

final NavigationTabBar navigationTabBar = (NavigationTabBar) findViewById(R.id.ntb_horizontal); 
navigationTabBar.setViewPager(viewPager, 2); 
1

要达到此目的,您可以创建自定义ViewPagerAdapter。例如:

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

import java.util.ArrayList; 

/** 
* Created by aupadhyay on 1/5/17. 
*/ 

public class ViewPagerAdapter extends FragmentPagerAdapter { 

    ArrayList<Fragment> fragments = new ArrayList<>(); 
    ArrayList<String> tabTitles = new ArrayList<>(); 

    public void addFragments(Fragment fragment, String tabTitle) 
    { 
     this.fragments.add(fragment); 
     this.tabTitles.add(tabTitle); 
    } 

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

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

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     return tabTitles.get(position); 
    } 

} 

现在,您可以设置viewpager适配器这样的:

final ViewPager viewPager = (ViewPager) findViewById(R.id.myviewpager); 

ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager()); 

     viewPagerAdapter.addFragments(new Tab0Fragment(), "First"); 
     viewPagerAdapter.addFragments(new Tab1Fragment(), "Second"); 
     viewPagerAdapter.addFragments(new Tab2Fragment(), "Third"); 
     // add more if required. 

viewPager.setAdapter(viewPagerAdapter); 

Tab0FragmentTab1FragmentTab1Fragment是由你创建你的viewpager添加片段。

相关问题