【问题标题】:How to refresh the content of a tab in an actionBar (Android)?如何刷新actionBar(Android)中选项卡的内容?
【发布时间】:2015-09-09 20:14:53
【问题描述】:

这里是我在 Android 4.x 上的“项目”的总结以及我无法解决的问题:

我有一个带有 2 个选项卡的 actionBar(我知道它已被弃用):

...
Fragment fragmentTab1 = new FragmentTab1();
Fragment fragmentTab2 = new FragmentTab2();    
Fragment fragmentTab3 = new FragmentTab3();
ActionBar.Tab tab1, tab2;
ActionBar actionBar = getActionBar();
tab1 = actionBar.newTab().setText("tab1");
tab2 = actionBar.newTab().setText("tab2");
tab1.setTabListener(new MyTabListener(fragmentTab1));
tab2.setTabListener(new MyTabListener(fragmentTab2));
actionBar.addTab(tab1);
actionBar.addTab(tab2);
...

我想更改选项卡的片段并刷新用户看到的内容,在方法中执行此操作(不仅在(重新)选择选项卡时)。

这听起来很简单,但不可能找到一种简单的方法来做到这一点。

在多次失败后,这就是我尝试的方法(我删除了标签并添加了一个新片段):

void myMethod () {
getActionBar().removeTabAt(0);
tab1 = actionBar.newTab().setText("tab3");
tab1.setTabListener(new MyTabListener(fragmentTab3));
getActionBar().addTab(tab1, 0);
...

然后这个可怕的事情绝望地尝试更新所看到的......

...
getActionBar().setSelectedNavigationItem(tab1.getPosition()+1);
getActionBar().setSelectedNavigationItem(tab1.getPosition());
}

一切都如愿以偿,除了重新选择的 tab1 是空的... :(

如果我用手指选择 tab2 然后选择 tab1(手动代替编程方式),然后 tab1 会按需要显示...

那么,如何以编程方式更改选项卡的内容并刷新在 actionBar 中看到的内容?

非常感谢您抽出宝贵时间!

【问题讨论】:

    标签: android android-fragments tabs android-actionbar


    【解决方案1】:

    你应该依赖 TabListener 方法,不要使用getActionBar().setSelectedNavigationItem()。网上有很好的代码示例。

    1) 谷歌网页@Creating Swipe Views with Tabs。代码sn-p:

    ActionBar.TabListener tabListener = new ActionBar.TabListener() {
        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
                // show the given tab
        }
    
        public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // hide the given tab
        }
    
        public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // probably ignore this event
        }
    };
    

    注意:刷新onTabSelected() 中的数据。您可以检查tab 参数中的标签或文本。

    2) 另一个很好的链接@@Android Fragment Tabs Example。来自链接的代码sn-p:

    public class TabListener implements ActionBar.TabListener {
        private Fragment fragment;
        public TabListener(Fragment fragment) {
            this.fragment = fragment;
        }
        // When a tab is tapped, the FragmentTransaction replaces
        // the content of our main layout with the specified fragment;
        // that's why we declared an id for the main layout.
        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            ft.replace(R.id.activity_main, fragment);
        }
    

    注意:再次刷新onTabSelected() 中的数据。我必须警告您,TabListener 在新的 Lollipop API 中已被弃用。

    编辑: 将选项卡设置为正确片段的示例代码。

    // Setting tab listeners.
    bmwTab.setTabListener(new TabListener(bmwFragmentTab));
    toyotaTab.setTabListener(new TabListener(toyotaFragmentTab));
    fordTab.setTabListener(new TabListener(fordFragmentTab));
    

    祝你好运,玩得开心......

    【讨论】:

    • 非常感谢您的回答。我编辑了我的问题以指定我想在方法中进行更改(不仅在选择选项卡时)。你能把你的解释扩展到这个案例吗?非常感谢!
    • @ArthurDent,欢迎使用 Stackoverflow (SO)。请阅读关于如何使用本网站@stackoverflow.com/tour 的 SO 教程。您将通过这种方式获得代表点数。我确实在 EDIT 下添加了更多示例代码。基本上在这一点上,您将不得不自己尝试代码。提供的链接中的示例代码是您要求的工作代码。如果您认为我发布的答案有帮助,您可以通过单击复选标记将其选为最佳答案。之后,您可以在尝试和进步后发布另一个问题。
    • 谢谢。我阅读了所有这些文档数百次,但它没有给我我的解决方案,因为 ontabselected() 在选择选项卡时(仅)被调用。我的愿望是从可以随时调用的方法中更改(全部)选项卡的内容。由于这个 (f*$%ng) 弃用,我正在考虑更改我的代码以使用正确的方法。我不需要“需要”在选项卡之间滑动,只需 3 个选项卡,并且能够通过方法更改其中一个选项卡的内容。您(或任何人)是否知道实现此目的的最佳方法(= 简单、未弃用且与 android 4 和 5 设备兼容)?
    猜你喜欢
    • 2022-09-27
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多