[英]How to identify the same tab or fragment when change tabs on tablayout?
[英]Tabs Indicator not moving with tabs or fragment while we scroll ,it was working properly when we click on tab in Tablayout without actionbar
package net.simplifiedcoding.androidtablayout.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Adapter;
import android.widget.Button;
import android.widget.Toast;
import com.astuetz.PagerSlidingTabStrip;
import net.simplifiedcoding.androidtablayout.Adapter.Pager;
import net.simplifiedcoding.androidtablayout.R;
import java.util.Vector;
//Implementing the interface OnTabSelectedListener to our MainActivity
//This interface would help in swiping views
public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener {
Context context;
//#
final int[] icons = new int[]{R.drawable.homeicon, R.drawable.searchicoon, R.drawable.uploadicon, R.drawable.usericon};
//This is our tablayout
private TabLayout tabLayout;
//This is our viewPager
private ViewPager viewPager;
Button optionmenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//Adding toolbar to the activity
//Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//setSupportActionBar(toolba
//Initializing the tablayout
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
viewPager = (ViewPager) findViewById(R.id.pager);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final PagerSlidingTabStrip tabStrip=(PagerSlidingTabStrip)findViewById(R.id.pagerslidingtabstrip);
//tabStrip.setViewPager(Pager);
//Adding the tabs using addTab() method
tabLayout.addTab(tabLayout.newTab().setText(""));
tabLayout.addTab(tabLayout.newTab().setText(""));
tabLayout.addTab(tabLayout.newTab().setText(""));
tabLayout.addTab(tabLayout.newTab().setText(""));
tabLayout.getTabAt(0).setIcon(icons[0]);
tabLayout.getTabAt(1).setIcon(icons[1]);
tabLayout.getTabAt(2).setIcon(icons[2]);
tabLayout.getTabAt(3).setIcon(icons[3]);
tabLayout.getTabAt(0).getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);
tabLayout.getTabAt(1).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
tabLayout.getTabAt(2).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
tabLayout.getTabAt(3).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
//Initializing viewPager
//Creating our pager adapter
Pager adapter = new Pager(getSupportFragmentManager(), tabLayout.getTabCount());
//Adding adapter to pager
viewPager.setAdapter(adapter);
//tabLayout.setupWithViewPager(viewPager);
// tabStrip.setOnPageChangeListener((ViewPager.OnPageChangeListener) this );
viewPager.setCurrentItem(0);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//tabLayout.setupWithViewPager(viewPager);
//tabLayout.setScrollIndicators(position);
//tabStrip.setViewPager(viewPager);
//tabLayout.setScrollIndicators(position);
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
tabLayout.setOnTabSelectedListener(this);
}
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
// super.onTabSelected(tab);
tab.getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);
//int tabIconColor = ContextCompat.getColor(context, R.color.tabselectedIconcolor);
//tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
tab.getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
}
<LinearLayout
android:id="@+id/main_layout"
android:orientation="vertical"
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:background="@color/colorPrimary"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Activity.MainActivity">
<!-- our toolbar -->
<!-- our tablayout to display tabs -->
<Toolbar
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="@color/colorPrimary">
</Toolbar>
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_marginTop="4dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabIndicatorColor="#ffffff"
app:tabIndicatorHeight="3dp"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
<!-- View pager to swipe views -->
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:background="@color/colorPrimary"
android:layout_width="match_parent"
android:layout_height="fill_parent">
<com.astuetz.PagerSlidingTabStrip
android:id="@+id/pagerslidingtabstrip"
android:layout_width="match_parent"
android:layout_height="0dip" />
</android.support.v4.view.ViewPager>
H
</LinearLayout>
这是我的布局文件。当我使用Tabsrtip.setupwithviewpager时,它在rosource文件中显示错误。 或不幸的是应用程序停止了。 我用tablayout.setupwithviewpager它也显示错误。 Beloy是我的java文件。
采用 :
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(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) {
}
});
在您的情况下,此viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {...
是错误的。
通过添加此行,将您的布局与viewpager同步
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
viewPager = (ViewPager) findViewById(R.id.pager);
Pager adapter = new Pager(getSupportFragmentManager(),tabLayout.getTabCount());
viewPager.setAdapter(adapter);
tabLayout .setupWithViewPager(viewPager );
并重写ViewPager适配器中的getPageTitle函数
@Override
public CharSequence getPageTitle(int position) {
return tabText[position];
}
@Override
public int getCount() {
return 2;
}
tabText = new String[]{
"Tab 1",
"Tab 2"
};
无需以编程方式将Tabs添加到tabLayout。 当您将其与viewpager同步时,它将从getpageTitle中选择标签的名称。 和计数从getCount选项卡
tabText是包含Tabs名称的字符串数组
用户更改标签时更改Tablayout图标。 在addOnPageChangeListener的onPageSelected方法中使用该函数
//Method to set up tab layout icon
private void setUpTabIcon() {
for (int i = 0; i < mTabLayout.getTabCount(); i++) {
if (mTabLayout.getTabAt(i).isSelected())
mTabLayout.getTabAt(i).setIcon(imageResId[i][1]);
else
mTabLayout.getTabAt(i).setIcon(imageResId[i][0]);
}
}
选择或取消选择页面时,此功能将更改图标。 使用2种状态的图标,其中一种是默认状态,另一种是按下状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.