【问题标题】:How to switch tabs programmatically in Android from fragment?如何在Android中以编程方式从片段切换选项卡?
【发布时间】:2013-05-01 08:51:15
【问题描述】:

我已经实现了一个扩展FragmentActivityTabActivity。它有 5 个标签,每个标签是 Fragment。我正在寻找的是以编程方式在选项卡之间切换。

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

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

来自 SecondTab

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

TabActivity

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

【问题讨论】:

    标签: android android-fragments android-tabhost


    【解决方案1】:

    对于 Material 支持,您可以通过以下方式从片段中切换选项卡布局:

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

    context.sendBroadcast(yourintent);
    

    2.) 对 vino 答案的修改,

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

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

    【讨论】:

    • 是的,它有效,只是信息标签索引从 0 开始。
    • 嗨@Kennedy,我的标签主机没有被初始化。它显示为空。 NullPointerException 可能是什么错误??
    • 它现在可以工作了,错误是由于我的一个愚蠢的错误。 :)
    • 嗨!有人可以帮帮我吗?我收到一个错误:Cannot resolve method 'getActivity()'.
    • @LloydDominic 确保您使用的是片段。
    【解决方案2】:

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

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

    希望对某人有所帮助。

    【讨论】:

    • android.R.id.tabhost 将抛出空指针异常。你已经打电话给getActivity.findViewByIdfindViewById(R.id.tabhost)是正确的选择
    【解决方案3】:

    我的 Main Activity 中有选项卡(使用 TabLayout 而不是 TabHost(depreciated))(带有 Fragments),其中在我的第一个选项卡(fragment)中,在 Fragment 中有一个单击侦听器,用于更改 MainActivity 中的当前选项卡。

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

    TabLayout tabs = (TabLayout)((MainActivity)getActivity()).findViewById(R.id.tabs);
    tabs.getTabAt(1).select();
    

    【讨论】:

    • 这是有效的答案......上层的不工作,因为tablayout在片段中为空,即使我们通过构造函数传递它..
    【解决方案4】:

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

    ((TabActivity) getParent()).getTabHost().setCurrentTab(2)
    

    【讨论】:

    • 谢谢汤姆,我认为那是我从片段中寻找的活动
    • @Vino 来自片段。 getParent() 是 Fragment 中的一个方法,它返回 Activity。
    • @Vino 试试 getActivity() 而不是 getParent() 然后。
    • 是的尝试过,但我面对的是The method getTabHost() is undefined for the type TabActivity((TabActivity) getActivity()).getTabHost().setCurrentTab(3);
    • 使用 switchTab() 并将其转换为您的具体实现,而不是 TabActivity。请注意,TabActivity 已弃用。
    【解决方案5】:

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

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

    (区别是R.id.tab_layout

    【讨论】:

      【解决方案6】:

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

       activity!!.<tab_id_in_xml>.getTabAt(tab_number)!!.select()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-07
        • 1970-01-01
        • 1970-01-01
        • 2012-02-01
        • 1970-01-01
        相关资源
        最近更新 更多