2016-01-23 22 views
5

W moim Android Project używam Material-design dla widoku kart. mam:Projekt wydarzenie kliknij przycisk na kartach 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" 
    /> 

i java klasa plik jest:

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

Z tego jestem coraz zakładkę Widok. . Ale tutaj Jak mogę usunąć strzałkę obok nazwy aplikacji? i przesuwne karty działają, ale kiedy kliknę na dowolnej karcie (tab1/tab2/tab3), kliknięcie zdarzenia nie działa. Dlaczego?

enter image description here

+0

kod Pracując tutaj, które można wykorzystać jako punkt odniesienia: http : //stackoverflow.com/questions/31698756/remove-line-break-in-tablayout/32547335#32547335 –

+0

Używasz 'setContentView (R.layout.activity_simple_tabs)' ale opublikowałeś 'tab_activity.xml' - które są faktycznie używasz? – ianhanniballake

+0

Istnieje sposób, aby wyłączyć przesuwanie palcem, drugi awnser https://stackoverflow.com/questions/9650265/how-do-disable-paging-by-swiping-with-finger-in-viewpager-but-still-be- w stanie-to-s/ –

Odpowiedz

4

myślę, że należy to wykorzystać:

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

dodać PagerAdapter klasę, dodać fragmenty ..

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> 

myślę, że to powinno działać ..

+0

To nie działa z błędem "PagerAdapter jest abstrakcyjny, nie można utworzyć wystąpienia". – FazJaxton

-1

myślę, że problem wynika z tutaj próbuje mieszać rzeczy do TabView gdy faktycznie nie otrzymuje wskazówkę, co chcesz obejrzeć.

Sugeruję użycie tylko ActionBar, jeśli nie używasz menu paska bocznego do głównej konfiguracji aktywności. Tutaj mam tylko ogólne ustawienia i możesz odpowiednio załadować nazwy fragmentów.

Wewnątrz swojej 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

Próbowałem już z tym wszystkim ... wiesz, że ... android.app.ActionBar.Tab ... jest przestarzałe w android-6 ?? – Preeti

+0

Jeśli Twój cel to 6.0+, użyj tego przykładu, jak tutaj: http: //blog.grafixartist.com/material-design-tabs-z-android-design-support-library/ – childofthehorn

0

wystarczy ustawić klikalny = true dla 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"/> 
Powiązane problemy