2016-10-08 9 views
1

Ich möchte in einem Fragment eine Registerkarte mit Pagerview (scrollbar) hinzufügen.Android Studio: wie Add Tabs mit ViewPager

public class MyFragment extends Fragment { 
    private FragmentTabHost tabHost; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     tabHost = new FragmentTabHost(getActivity()); 
     tabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent); 
     tabHost.addTab(tabHost.newTabSpec("one").setIndicator("One"), OneFragment.class, null); 
     tabHost.addTab(tabHost.newTabSpec("two").setIndicator("Two"), TwoFragment.class, null); 
     return tabHost; 
    } 


    @Override 
    public void onDestroyView(){ 
     super.onDestroyView(); 
     tabHost=null; 
    } 
} 

Mit diesem Layout

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.app.FragmentTabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/realtabcontent" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1"/> 

    </LinearLayout> 
</android.support.v4.app.FragmentTabHost> 

ich mehrere Lösungen ausprobiert, aber nicht funktionieren. Ich brauche Fragment, nicht fragmentActivity. Der Code aufgeschrieben funktioniert.

+0

Verwendung TabLayout statt TabHost – darwin

+0

Prüfung dieses Tutorial http://www.androidhive.info/2015/09/android-material-design-working-with-tabs/ – darwin

Antwort

-1

Gebrauchte xml-Datei wie folgt:

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


    <android.support.design.widget.TabLayout 
     android:id="@+id/tabLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     app:tabGravity="fill" 
     app:tabMode="fixed" 
     app:tabMaxWidth="0dp" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

    <!-- View pager to swipe views --> 
    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent"/> 

</LinearLayout> 

und Ihre Java-Datei ist hier:

public class MyFragment extends Fragment { 

    private View view; 
    private TabLayout tabLayout; 

    //This is our viewPager 
    private ViewPager viewPager; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     view = inflater.inflate(R.layout.sticker_fragment, container, false); 

     tabLayout = (TabLayout) view.findViewById(R.id.tabLayout); 

     viewPager = (ViewPager) view.findViewById(R.id.pager); 

     Viewpager adapter = new Viewpager(getActivity().getSupportFragmentManager(), getActivity()); 

     //Adding adapter to pager 
     viewPager.setAdapter(adapter); 


     tabLayout.setupWithViewPager(viewPager); 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 

      }); 

     return view; 
    } 



} 

danach viewpager Adapter ist wie folgt:

public class Viewpager extends FragmentStatePagerAdapter { 

    final int PAGE_COUNT = 2; 
    private String tabTitles[] = new String[]{"Local","Online"}; 
    private Context context; 

    public Viewpager(FragmentManager fm, Context context) { 
     super(fm); 
     this.context = context; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position){ 
      case 0: 
       OneFragment oneFragment=new OneFragment(); 
       return oneFragment; 
      case 1: 
       TwoFragment twoFragment=new TwoFragment(); 
       return twoFragment; 
      default: 
       return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return tabTitles.length; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 

     return tabTitles[position]; 
    } 

} 
0

ViewPagerTabAdapter.java

class ViewPagerTabAdapter extends FragmentPagerAdapter { 

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

    public ViewPagerTabAdapter(FragmentManager manager) { 
     super(manager); 
    } 

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

MainActivity.java

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerTabAdapter adapter = new ViewPagerTabAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new UtamaFragment(), "Beranda"); 
    adapter.addFragment(new HotFragment(), "Hot Promo"); 
    adapter.addFragment(new DiskonFragment(), "Diskon Besar"); 
    viewPager.setAdapter(adapter); 
} 
Verwandte Themen