2014-02-01 8 views
0

Я использую библиотеку поддержки для создания панели действий в своем приложении. Я добавил действия в панели действий, которые работают отлично. Теперь я редактирую вкладки ниже этого. Но для изменения вкладок мне нужно щелкнуть по вкладкам. Я хочу добавить прокрутку в этот код. Но это сложно для меня, поскольку я беру ссылку из одной ссылки, которая только показывает, чтобы добавить вкладки и изменить их при нажатии на них. Поэтому, пожалуйста, кто-нибудь поможет мне добавить салфетки с экрана, чтобы изменить вкладки.Как добавить салфетки в закладки

код-

public class Types extends ActionBarActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.types); 
     setupTabs();   
    } 


    private void setupTabs() { 
     android.support.v7.app.ActionBar ab = getSupportActionBar(); 
     ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     Tab tab = ab.newTab() 
     .setText(R.string.frag1).setTabListener(new MyTabListener(this, Type1.class.getName())); 
     ab.addTab(tab); 

     tab = ab.newTab() 
     .setText(R.string.frag2).setTabListener(new MyTabListener(this, Type2.class.getName())); 
     ab.addTab(tab); 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu items for use in the action bar 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.action_search: 
     homeActivity(); 
     return true; 

     default: 
     return super.onOptionsItemSelected(item); 
     } 
    } 

    public void homeActivity() { 
     Toast.makeText(this, "Home Option Selexted", Toast.LENGTH_SHORT).show(); 
    } 

private class MyTabListener implements ActionBar.TabListener 
{ 
    private Fragment mFragment; 
    private final Activity mActivity; 
    private final String mFragName; 

    public MyTabListener(Activity activity, String fragName) 
    { 
     mActivity = activity; 
     mFragName = fragName; 
    } 

    @Override 
    public void onTabReselected(Tab tab, 
     FragmentTransaction ft) 
    {  
    } 

    @Override 
    public void onTabSelected(Tab tab, 
     FragmentTransaction ft) 
    { 
     mFragment = Fragment.instantiate(mActivity, mFragName); 
     ft.add(android.R.id.content, mFragment); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) 
    { 
     ft.remove(mFragment); 
     mFragment = null; 
    } 
} 
+0

использование 'viewPager' для показа вкладки для образца загрузки http://www.androidhive.info/2013/10/android-tab-layout-with-swipeable-views- 1/ –

+0

Я уже проверил эту ссылку. Но, как вы видите, мой код полностью отличается от этого. Поэтому его действительно трудно понять по этой ссылке. –

ответ

2

Создать ViewPagerAdapter class-

public class ViewPagerAdapter extends FragmentStatePagerAdapter { 

    private final int PAGES = 4; 

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

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return new Type1(); 
      case 1: 
       return new Type2(); 
      case 2: 
       return new Type3(); 
      case 3: 
       return new Type4(); 
      default: 
       throw new IllegalArgumentException("The item position should be less or equal to:" + PAGES); 
     } 
    } 

    @Override 
    public int getCount() { 
     return PAGES; 
    } 
} 

Тогда в вашем Typle class-

public class Types extends ActionBarActivity { 

    private ViewPager viewPager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.pagerad); 
     viewPager = (ViewPager) findViewById(R.id.pager); 
     ab = getSupportActionBar(); 
     ab.setDisplayHomeAsUpEnabled(true); 
     ab.setDisplayShowHomeEnabled(true); 
     viewPager.setOnPageChangeListener(onPageChangeListener); 
     viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager())); 
     addActionBarTabs(); 
    } 

    private ViewPager.SimpleOnPageChangeListener onPageChangeListener = new ViewPager.SimpleOnPageChangeListener() { 
    @Override 
    public void onPageSelected(int position) { 
    super.onPageSelected(position); 
    ab.setSelectedNavigationItem(position); 
     } 
    }; 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu items for use in the action bar 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.action_search: 
     homeActivity(); 
     return true; 

     default: 
     return super.onOptionsItemSelected(item); 
     } 
    } 

    public void homeActivity() { 
     Toast.makeText(this, "Home Option Selexted", Toast.LENGTH_SHORT).show(); 
    } 

    private void addActionBarTabs() { 
     ab = getSupportActionBar(); 
     String[] tabs = { "TYPE 1", "TYPE 2", "TYPE 3", "TYPE 4" }; 
     for (String tabTitle : tabs) { 
      ActionBar.Tab tab = ab.newTab().setText(tabTitle).setTabListener(tabListener); 
      ab.addTab(tab); 
     } 
     ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    } 

    private ActionBar.TabListener tabListener = new ActionBar.TabListener() { 
     @Override 
     public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { 
     } 

     @Override 
     public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { 
     } 
    }; 

} 

Наконец создают pagerad xml-

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</android.support.v4.view.ViewPager> 

Затем создайте Каждый фрагмент типа, как-

public class Type1 extends Fragment{ 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.type, container, false) 
    return rootView; 
    } 
} 
0

Вы должны использовать ViewPager. При внедрении viewpager из андроид-учебника вам просто нужно сосредоточиться на методе getitem для SectionsPagerAdapter. Здесь вы можете выбрать правильный фрагмент, основанный на позиции позиции «view».

Ваша задача состоит в том, что сабвуферная часть приложения теперь только одна активность, и каждый вид теперь должен быть реализован как фрагмент. Но этот макет кажется совместимым с вашим текущим кодом (например, аналогично методу onTabSelected).

Вы types.xml файл должен быть ViewPager:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/pager" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.Types" /> 

Далее объявить ViewPager и SectionsPagerAdapter в деятельности вы Types:

SectionsPagerAdapter mSectionsPagerAdapter; 
ViewPager mViewPager; 

Теперь, вы OnCreate добавить:

// Create the adapter that will return a fragment for each swipe screen 
mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager()); 
// Set up the ViewPager with the sections adapter. 
mViewPager = (ViewPager) findViewById(R.id.pager); 
mViewPager.setAdapter(mSectionsPagerAdapter); 

SectionsPagerAdapter реализован как:

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

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

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     if (position == 2) { 
      return new FragmentA(); 
     } else if (position == 1) { 
      return new FragmentB(); 
     } else { 
      // Pattern from you code... 
      return Fragment.instantiate(mActivity, mFragName); 
     } 
    } 

    @Override 
    public int getCount() { 
     // Show 3 total pages. 
     return 3; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     Locale l = Locale.getDefault(); 
     switch (position) { 
      case 0: 
       return getString(R.string.title_section1).toUpperCase(l); 
      case 1: 
       return getString(R.string.title_section2).toUpperCase(l); 
      case 2: 
       return getString(R.string.title_section3).toUpperCase(l); 
     } 
     return null; 
    } 
} 

Это все :)

+0

Я знаю, что мне нужно использовать ViewPager. Но я не знаю, как реализовать это в моем коде. –

+0

Отредактировал свой ответ, чтобы объяснить его шаг за шагом ... – Paamand

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