标签更改监听器android
Posted
技术标签:
【中文标题】标签更改监听器android【英文标题】:Tab change listener android 【发布时间】:2021-08-22 20:46:57 【问题描述】:我的 HomeActivity 扩展了使用 2 个选项卡的 AppCompatActivity。
public class HomeActivity extends AppCompatActivity
private SectionsPagerAdapter mSectionsPagerAdapter;
private TabLayout tabLayout;
...
@Override
protected void onCreate(Bundle savedInstanceState)
...
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
...
如何监听标签更改事件? 让我知道是否需要为清楚起见添加更多代码。
【问题讨论】:
你用谷歌搜索过吗? ***.com/a/30904479/2784838 setOnTabSelectedListener 已弃用。 【参考方案1】:您可以使用 OnTabChangeListener。见下文
TabLayout tabLayout = new TabLayout(this);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
@Override
public void onTabSelected(TabLayout.Tab tab)
//do stuff here
@Override
public void onTabUnselected(TabLayout.Tab tab)
@Override
public void onTabReselected(TabLayout.Tab tab)
);
希望有帮助。
【讨论】:
如果你在2021年使用viewpager2,***.com/a/66490570/5777189【参考方案2】:使用ViewPager.onPageChangeListener
:
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener()
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
@Override
public void onPageSelected(int position)
@Override
public void onPageScrollStateChanged(int state)
);
【讨论】:
【参考方案3】:你可以使用addOnTabSelectedListener
方法:
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
@Override
public void onTabSelected(TabLayout.Tab tab)
viewPager.setCurrentItem(tab.getPosition());
if (tab.getPosition() == 0)
toolBarTitle.setText("Tab one");
else if (tab.getPosition() == 1)
toolBarTitle.setText("Tab two");
else
toolBarTitle.setText("Tab three");
@Override
public void onTabUnselected(TabLayout.Tab tab)
@Override
public void onTabReselected(TabLayout.Tab tab)
);
【讨论】:
【参考方案4】: kotlin 情人的标签更改监听器
tab_selector_layout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener
override fun onTabSelected(tab: TabLayout.Tab?)
override fun onTabUnselected(tab: TabLayout.Tab?)
override fun onTabReselected(tab: TabLayout.Tab?)
)
【讨论】:
【参考方案5】:来自Documentation
你需要实现TabLayout.OnTabSelectedListener
public class HomeActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener
重写以下监听事件的方法:
@Override
public void onTabSelected(TabLayout.Tab tab)
int position = tab.getPosition();
@Override
public void onTabUnselected(TabLayout.Tab tab)
@Override
public void onTabReselected(TabLayout.Tab tab)
【讨论】:
【参考方案6】:您应该将OnTabChangeListener
实现到TabActivity
类而不是Tab 的内容。
在你的 TabActivity 中实现OnTabChangeListener
然后为TabHost mTabHost.setOnTabChangedListener(this);
设置监听器
例 1
@Override
public void onTabChanged(String tabId)
Log.i("selected tab ", tabId);
Ex.2
public class HelloTabWidget extends TabActivity implements OnTabChangeListener
private TabHost mTabHost;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Resources res = getResources();
TabHost tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
mTabHost = getTabHost();
intent = new Intent().setClass(this, BarActivity.class);
spec = tabHost.newTabSpec("Name").setIndicator("Name",res.getDrawable(R.drawable.ic_tab_name)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, CityActivity.class);
spec = tabHost.newTabSpec("city").setIndicator("City",res.getDrawable(R.drawable.ic_tab_city)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, MapsActivity.class);
spec = tabHost.newTabSpec("Country").setIndicator("Country",res.getDrawable(R.drawable.ic_tab_map)).setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(2);
mTabHost.setOnTabChangedListener(this);
public void onTabChanged(String tabId)
Toast.makeText(getApplicationContext(), "Selected Tab "+tabId, Toast.LENGTH_LONG).show();
Log.i("selected tab index", "Current index - "+ mTabHost.getCurrentTab());
【讨论】:
onTabChanged 现已弃用【参考方案7】:取决于你想要什么。如果您只想知道标签页是否发生变化,或者想知道选择了哪个标签位置,请使用:
mViewPager.setOnPageChangeListener(new OnPageChangeListener()
public void onPageScrollStateChanged(int state)
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
public void onPageSelected(int position)
);
否则,如果您想跟踪选项卡本身,则必须像这样实现TabLayout.OnTabSelectedListener
:
public class HomeActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener
并将这些方法添加到您的 HomeActivity 类中:
@Override
public void onTabSelected(TabLayout.Tab tab)
@Override
public void onTabUnselected(TabLayout.Tab tab)
@Override
public void onTabReselected(TabLayout.Tab tab)
【讨论】:
【参考方案8】:tab_layout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
@Override
public void onTabSelected(TabLayout.Tab tab)
viewpager.setCurrentItem(tab.getPosition());
if (tab.getPosition() == 6 || tab.getPosition() == 11 )
if (mInterstitialAd.isLoaded())
mInterstitialAd.show();
【讨论】:
此问题已包含多个答案和一个已接受的答案。您能否解释(通过编辑您的答案)您的答案与其他答案的不同之处?也知道从长远来看,仅代码的答案是没有用的。以上是关于标签更改监听器android的主要内容,如果未能解决你的问题,请参考以下文章
Android-Android ViewPager 怎么添加点击监听器