27

我已经实现了一个TabActivitywhich extends FragmentActivity。它有 5 个选项卡,每个选项卡是一个Fragment. 我正在寻找的是以编程方式在选项卡之间切换。

例如:如果我在 tab4 中。单击按钮时,我想从 移动tab4tab1。尝试了很多,但找不到解决方案。

尝试了以下方法,但没有帮助。

从 SecondTab

public void switchTabInActivity(String value){
    FirstTab parent;
    parent = (FirstTab) getActivity().getParent();
    parent.switchTab(value);
}

选项卡活动

  /** To Change Tab*/
public void switchTab(String tabno){ 
    this.onTabChanged(tabno);
}
4

6 回答 6

30

对于 Material 支持,您可以通过以下方式从片段中切换 tablayout:

1)发送由父活动接收的广播,然后修改选项卡。

context.sendBroadcast(yourintent);

2.)对vino答案的修改,

TabLayout tabhost = (TabLayout) getActivity().findViewById(R.id.tabLayout);
tabhost.getTabAt(2).select();

tablayout 是主 xml 中定义的 tablayout 的 id。

于 2015-08-24T19:25:51.553 回答
21

最后,我可以使用以下代码行以编程方式从 Fragments 在选项卡之间切换

  TabHost host = (TabHost) getActivity().findViewById(android.R.id.tabhost);
  host.setCurrentTab(2);

希望它会帮助一些人。

于 2013-05-01T09:13:28.187 回答
19

我的主要活动中有选项卡(使用 TabLayout 而不是 TabHost(折旧))(带有片段),其中在我的第一个选项卡(片段)中,片段中有一个单击侦听器,用于更改我的 MainActivity 中的当前选项卡。

我通过片段内的 onCreateView() 方法中的以下内容成功更改了当前选项卡。

TabLayout tabs = (TabLayout)((MainActivity)getActivity()).findViewById(R.id.tabs);
tabs.getTabAt(1).select();
于 2018-04-28T03:45:11.440 回答
7

看看这个答案:https ://stackoverflow.com/a/5460651/198996

((TabActivity) getParent()).getTabHost().setCurrentTab(2)
于 2013-05-01T08:58:27.927 回答
4

如果您使用的是 TabLayout 而不是 TabHost ,我建议修改BENN1TH对我有用的答案:

  TabLayout tabs = getActivity().findViewById(R.id.tab_layout);
  tabs.getTabAt(tabNumber).select(); 

(区别是R.id.tab_layout

于 2019-04-25T09:19:04.880 回答
1

对于 kotlin ,请使用此表单片段

 activity!!.<tab_id_in_xml>.getTabAt(tab_number)!!.select()
于 2021-05-10T13:53:55.860 回答