2016-04-18 8 views
2

Die Schieberegisterkarten funktionieren problemlos beim Durchziehen von Registerkarten, funktionieren jedoch nicht beim Klicken auf Registerkarten. Tab-Lick wischt Sie nicht zum relevanten Tab-Inhalt. Im Folgenden finden Sie MainActivity.java ist, wo ich auf viewpager und SlidingTabLayout arbeite:Das Umschalten der Registerkarten funktioniert nicht beim Klicken auf Registerkarten mit "SlidingtabLayout"

public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 
    //Declaring All The Variables Needed 
    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 
    private ViewPagerAdapter viewPagerAdapter; 

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

     /* 
     Assigning view variables to their respective view in xml 
     by findViewByID method 
     */ 

     toolbar = (Toolbar) findViewById(R.id.tool_bar); 
     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     viewPager = (ViewPager) findViewById(R.id.viewpager); 

     /* 
     Creating Adapter and setting that adapter to the viewPager 
     setSupportActionBar method takes the toolbar and sets it as 
     the default action bar thus making the toolbar work like a normal 
     action bar. 
     */ 
     viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     viewPager.setAdapter(viewPagerAdapter); 
     setSupportActionBar(toolbar); 

     /* 
     TabLayout.newTab() method creates a tab view, Now a Tab view is not the view 
     which is below the tabs, its the tab itself. 
     */ 

     final TabLayout.Tab tasbih1 = tabLayout.newTab(); 
     final TabLayout.Tab tasbih2 = tabLayout.newTab(); 
     final TabLayout.Tab tasbih3 = tabLayout.newTab(); 
     final TabLayout.Tab tasbih4 = tabLayout.newTab(); 

     /* 
     Setting Title text for our tabs respectively 
     */ 

     tasbih1.setText("تسبيح"); 
     tasbih2.setText("إستغفار"); 
     tasbih3.setText("عدد الركعات"); 
     tasbih4.setText("إتجاه القبلة"); 

     /* 
     Adding the tab view to our tablayout at appropriate positions 
     As I want home at first position I am passing home and 0 as argument to 
     the tablayout and like wise for other tabs as well 
     */ 
     tabLayout.addTab(tasbih1, 0); 
     tabLayout.addTab(tasbih2, 1); 
     tabLayout.addTab(tasbih3, 2); 
     tabLayout.addTab(tasbih4, 3); 


     /* 
     TabTextColor sets the color for the title of the tabs, passing a ColorStateList here makes 
     tab change colors in different situations such as selected, active, inactive etc 

     TabIndicatorColor sets the color for the indiactor below the tabs 
     */ 

     tabLayout.setTabTextColors(ContextCompat.getColorStateList(this, R.drawable.tab_selector)); 
     tabLayout.setSelectedTabIndicatorColor(ContextCompat.getColor(this, R.color.indicator)); 

     /* 
     Adding a onPageChangeListener to the viewPager 
     1st we add the PageChangeListener and pass a TabLayoutPageChangeListener so that Tabs Selection 
     changes when a viewpager page changes. 
     */ 

     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 




     /* 
     SensorManager mSensorManager; 

     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     if (mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) != null){ 
      //Toast.makeText(this, "Magnetic sensor exists", Toast.LENGTH_LONG).show(); 

     } 
     else { 
      Toast.makeText(this, "Magnetic sensor doesn't exist", Toast.LENGTH_LONG).show(); 
     } 
     */ 
    } 

    public void onTabSelected(TabLayout.Tab tab) { 
     // on tab selected 
     // show respected fragment view 
     viewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onClick(View v) { 

    } 

} 
+1

Veröffentlichen Sie Ihren Code und wenn ein Stack-Trace dann auch diese Post. –

+0

Überprüfen Sie meine aktualisierte Frage. – Youri

+0

Fügen Sie dies auf 'onCreate'' tabLayout.setupWithViewPager (viewPager); '. –

Antwort

1

In Ihrem Activity oder Fragment Klasse, wenn nicht hinzufügen -

TabLayout.setupWithViewPager(ViewPager); 

In diesem Fall, wenn Sie klauen, Ihre Registerkarte wird sich nicht ändern, nur ViewPager. Für andere Fälle müssen Sie Ihren Code eingeben

+0

Boom Boom !! Es funktioniert gut für mich! Danke, Alter! – Youri

+0

Sie haben die Zeile TabLayout nicht hinzugefügt.setupWithViewPager (viewPager); ' Fügen Sie es am Ende von' onCreate() 'Methode hinzu –

0

Fügen Sie die folgende Überschreibungsmethode hinzu.

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

     }); 
3

Versuchen Sie unter eins, wenn sich Ihre Registerkarte nicht auf der Vorderseite befindet.

findViewById(R.id.tabs).bringToFront(); 

Auch ich glaube, Sie haben vergessen zu verwenden.

tabLayout.setupWithViewPager(viewPager); 
1

Sie können Ihr XML einchecken, wenn sich der viewpager nicht mit dem Tablayout überschneidet. wenn Überlappung dann wählen Sie die Registerkarte nicht

0
**I Faced The same problem, I Solved it By 

android wrok: layout_below = "@ + id/sliding_tabs" auf ViewPager und Android: layout_height = "wrap_content" auf SlidingTablayout **

<com.androidbegin.pagertabstriptutorial.SlidingTabLayout 
     android:id="@+id/sliding_tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content">   
    </com.androidbegin.pagertabstriptutorial.SlidingTabLayout> 
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_below="@+id/sliding_tabs" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
</android.support.v4.view.ViewPager> 
-2

geschah das gleiche th mir. Ich reparierte es mit

android:layout_below="@+id/appBarLayout" 
0

Ich hatte dieses Problem vorher.

Auch wenn eine ViewPager Ihre Tabs nicht überlappt (wie andere Antworten vorgeschlagen haben), ist es möglich, dass einige Element überlappt. Nach meiner Erfahrung ist oft ein Toolbar der Schuldige.

Zuerst werfen Sie einen Blick auf dieses Layout und stellen Sie sicher, dass Sie etwas ähnliches haben. Besonders zu beachten die TabLayout ‚s Eigenschaften:

<?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:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tab_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:elevation="6dp" 
     android:minHeight="?attr/actionBarSize" 
     app:tabMode="scrollable"> 

     <android.support.design.widget.TabItem 
      android:id="@+id/tab_home" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/tab_home" /> 
<!-- And so on, with more tabs... --> 

Wenn Sie so etwas wie die oben haben, stellen Sie sicher, dass Sie den entsprechenden Code in der entsprechenden Aktivität des onCreate Methode haben. So etwas sollte funktionieren:

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

     final TabLayout tabLayout = findViewById(R.id.tab_layout); 
     final ViewPager viewPager = findViewById(R.id.pager); 
     final PagerAdapter adapter = new PagerAdapter(this, getSupportFragmentManager(), tabLayout.getTabCount()); 

     viewPager.setAdapter(adapter); 
     tabLayout.setupWithViewPager(viewPager); 

     tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 
       // Nothing needed here. 
      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 
       // Nothing needed here. 
      } 
     }); 
    } 

Beachten Sie, dass in diesem Code, verwende ich eine benutzerdefinierte FragmentStatePagerAdapter, PagerAdapter. Sie können den gewünschten Pager-Adapter verwenden.