2016-01-23 18 views
5

В моем Android-проекте Я использую Материал-дизайн для просмотра в виде табуляции. у меня есть:Событие события для дизайна Android-дизайна на вкладках

tab_activity.xml

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|enterAlways" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:tabMode="fixed" 
     app:tabGravity="fill"/> 
</android.support.design.widget.AppBarLayout> 

<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    /> 

и Java класс файла:

public class SimpleTabsActivity extends AppCompatActivity { 

    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tab_activity); 

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new OneFragment(), "ONE"); 
     adapter.addFragment(new TwoFragment(), "TWO"); 
     adapter.addFragment(new ThreeFragment(), "THREE"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(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); 
     } 
    } 
} 

С этим я получаю вид вкладки. . Но, здесь Как удалить стрелку рядом с именем приложения? и скользящие вкладки работают, но когда я нажимаю на любую вкладку (tab1/tab2/tab3), событие click не работает.

enter image description here

+0

Рабочего кода здесь, что вы можете использовать в качестве ссылки: HTTP : //stackoverflow.com/questions/31698756/remove-line-break-in-tablayout/32547335#32547335 –

+0

Вы используете 'setContentView (R.layout.activity_simple_tabs)', но вы отправили 'tab_activity.xml' - которые вы на самом деле используете? – ianhanniballake

+0

Существует способ отключения пальца, второго азера https://stackoverflow.com/questions/9650265/how-do-disable-paging-by-swiping-with-finger-in-viewpager-but-still-be- can-to-s/ –

ответ

4

Я думаю, вы должны использовать это:

MainActivity.java

 @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 

      TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
      tabLayout.addTab(tabLayout.newTab().setText("Tab 1")); 
      tabLayout.addTab(tabLayout.newTab().setText("Tab 2")); 
      tabLayout.addTab(tabLayout.newTab().setText("Tab 3")); 
      tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

      final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
      final PagerAdapter adapter = new PagerAdapter 
        (getSupportFragmentManager(), tabLayout.getTabCount()); 
      viewPager.setAdapter(adapter); 
      viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
      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) { 

       } 
      }); 
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      getMenuInflater().inflate(R.menu.menu_simple_tabs, menu); 
      return true; 
     } 

добавить PagerAdapter класс, добавьте фрагменты ..

activity_main.xml

<RelativeLayout 
    android:id="@+id/main_layout" 
    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" 
    tools:context=".MainActivity"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:background="?attr/colorPrimary" 
     android:elevation="6dp" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tab_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/toolbar" 
     android:background="?attr/colorPrimary" 
     android:elevation="6dp" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@id/tab_layout"/> 

</RelativeLayout> 

Я думаю, что это должно работать ..

+0

Это больше не работает с ошибкой «PagerAdapter является абстрактным, не может быть создан». – FazJaxton

-1

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

Я предлагаю просто использовать ActionBar, если на самом деле не использовать меню боковой панели для вашей основной настройки активности. Здесь у меня есть общие настройки, и вы можете соответственно загрузить имена фрагментов.

Внутри вашего MainActivity.xml

protected void onCreate(android.os.Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ActionBar bar = getActionBar(); 
     bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     Tab listTab = bar.newTab().setText(R.string.list_title); 
     Tab generalTab = bar.newTab().setText(R.string.generalsettings); 
     Tab faqtab = bar.newTab().setText(R.string.faq); 
     Tab abouttab = bar.newTab().setText(R.string.about); 

     listTab.setTabListener(new TabListener<ProfileList>("profiles", ProfileList.class)); 
     generalTab.setTabListener(new TabListener<GeneralSettings>("settings", GeneralSettings.class)); 
     faqtab.setTabListener(new TabListener<FaqFragment>("faq", FaqFragment.class)); 
     abouttab.setTabListener(new TabListener<AboutFragment>("about", AboutFragment.class)); 

     bar.addTab(listTab); 
     bar.addTab(generalTab); 
     bar.addTab(faqtab); 
     bar.addTab(abouttab); 

     if(SendDumpFragment.getLastestDump(this)!=null) { 
      Tab sendDump = bar.newTab().setText(R.string.crashdump); 
      sendDump.setTabListener(new TabListener<SendDumpFragment>("crashdump",SendDumpFragment.class)); 
      bar.addTab(sendDump); 
     } 

    } 

    protected class TabListener<T extends Fragment> implements ActionBar.TabListener 
    { 
     private Fragment mFragment; 
     private String mTag; 
     private Class<T> mClass; 


     public TabListener(String tag, Class<T> clz) { 
      mTag = tag; 
      mClass = clz; 

      // Check to see if we already have a fragment for this tab, probably 
      // from a previously saved state. If so, deactivate it, because our 
      // initial state is that a tab isn't shown. 
      mFragment = getFragmentManager().findFragmentByTag(mTag); 
      if (mFragment != null && !mFragment.isDetached()) { 
       FragmentTransaction ft = getFragmentManager().beginTransaction(); 
       ft.detach(mFragment); 
       ft.commit(); 
      } 
     } 

     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      if (mFragment == null) { 
       mFragment = Fragment.instantiate(MainActivity.this, mClass.getName()); 
       ft.add(android.R.id.content, mFragment, mTag); 
      } else { 
       ft.attach(mFragment); 
      } 
     } 

     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      if (mFragment != null) { 
       ft.detach(mFragment); 
      } 
     } 


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

     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     System.out.println(data); 


    } 
+0

Я уже пробовал со всем этим..у вас знаю ... android.app.ActionBar.Tab ... устарел в android-6 ?? – Preeti

+0

Если ваша цель 6.0+, используйте этот пример, как показано здесь: http: //blog.grafixartist.com/material-design-tabs-with-android-design-support-library/ – childofthehorn

0

просто установить интерактивной = верно для TabLayout

<android.support.design.widget.TabLayout 
    android:id="@+id/tabs_home" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:tabPaddingStart="0dp" 
    app:tabPaddingEnd="0dp" 
    app:tabIndicatorHeight="3dp" 
    android:clickable="true" 
    app:tabMaxWidth="0dp"/> 
Смежные вопросы