2014-11-19 2 views
0

У меня есть 3 навигационных вкладки с тремя различными фрагментами в них.Как добавить салфетки между вкладками навигации в android?

Как добавить салфетки между фрагментами?

+0

Что такое "navigation tabs"? – CommonsWare

+0

3 вкладки под панелью действий. Когда они нажаты, они переключают фрагменты – dumbstudent

+0

Как вы реализовали «3 вкладки под панелью действий»? – CommonsWare

ответ

1

Android сделал что-то по этой причине, называемое ViewPager!

в вашем OnCreate метод, сделать что-то вроде этого:

pager = (ViewPager) findViewById(R.id.pager); 
adapter = new MyPagerAdapter(getSupportFragmentManager()); 

pager.setAdapter(adapter); 

тогда

Включить следующее в ваш MainActivity:

public class MyPagerAdapter extends FragmentStatePagerAdapter { 
    SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>(); 

    private final String[] TITLES = getResources().getStringArray(R.array.tabs); 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     return TITLES[position]; 
    } 

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

    @Override 
    public Fragment getItem(int position) { 
     switch(position) { 
      case 0: return OneFragment.newInstance(position); 
      case 1: return TwoFragment.newInstance(position); 
      case 2: return ThreeFragment.newInstance(position); 
     } 

     return null; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     Fragment fragment = (Fragment) super.instantiateItem(container, position); 
     registeredFragments.put(position, fragment); 
     return fragment; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     registeredFragments.remove(position); 
     super.destroyItem(container, position, object); 
    } 

    public Fragment getRegisteredFragment(int position) { 
     return registeredFragments.get(position); 
    } 
} 

код я отправил это код я использую. Это сложнее, чем обычно. Он отслеживает фрагменты (каждая вкладка), позволяя вам получить доступ к фрагментам друг от друга. Так что, если вы были в OneFragment, и хотел доступ к TwoFragment, вы могли бы сделать что-то вроде:

в OneFragment

private void getTwoFragmentData() { 
    data = (MainActivity) getActivity.getTwoFragmentData(); 
} 

в MainActivity

public Data getTwoFragmentData() { 
    TwoFragment twoFragment = (TwoFragment) adapter.getRegisteredFragment(1); 
    return twoFragment.getData();  
} 

данных выше всего заполнитель для того, чтобы вы могли взаимодействовать с ним, но приведенный выше код является общей структурой того, как вы это сделаете.

Также вы должны отредактировать метод getItem. И сделайте switch, case соответственно.

В дополнение, вы можете сделать pager.setOffScreenPageLimit(x), а также загрузить содержимое x вкладок от текущей вкладки, что полезно для хранения информации. Для 3 вкладок я бы использовал x = 2, но в конечном счете, будьте осторожны, потому что это дополнительная память.

Наконец-то, последнее, что я использую библиотеку под названием com.astuetz.PagerSlidingTabStrip, которая является удивительной для того, чтобы получить панель под вкладками, чтобы пронестись с вами и сделать ее очень чистой. Добавление его очень просто, и вы найдете более подробную информацию here

Мои activity_main.xml выглядит следующим образом:

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

<!-- <com.astuetz.PagerSlidingTabStrip --> 
<!-- android:id="@+id/tabs" --> 
<!-- android:layout_width="match_parent" --> 
<!-- android:layout_height="48dip" /> --> 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    <!-- android:layout_below="@+id/tabs" --> 
    tools:context=".MainActivity" /> 

</RelativeLayout> 

Игнорируйте закомментирована материал. Это то, что я использую в дополнение к тому, что библиотека, указанная выше, интегрирована.

+0

Как выглядит pager xml? мой просмотрщик фрагментов выглядит следующим образом: dumbstudent

+0

Я редактировал ответ. – David

Смежные вопросы