2017-02-18 5 views
4

私はViewPagerを使用して左にスワイプするフラグメントを作成し、各フラグメントページにフラグメントを挿入します。ANDROID:instantiateItemメソッド内の異なるフラグメントを持つViewPager

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> 

私は ViewPager mainActivity.java

を持っています
final ViewPager viewPager = (ViewPager) findViewById(R.id.myviewpager); 
viewPager.setAdapter(new PagerAdapter() { 
... 

... 
} 

フラグメントレイアウトを使用して、ビューページで1つの画面を開きます。

私はこれ試してみてください。私はアンドロイドでのnoob午前

public class tab0Fragment extends Fragment { 

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

tab0Fragment.java

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) 
      ... 

    } 

... 
} 

を。どのようにこのコードを修正できますか?


ソリューション: の答えは私の答えではなかったが、それは私をたくさん助けて。

による。ウサギans @ Upadayay私はこれにトップコードを変更する:

@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); 

最後に、NavigationTabBarをViewPagerで設定します。

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に追加するために、あなたが作成した断片です。

関連する問題