【问题标题】:Android - Different ActionBar depending on the Fragment in a tabbed ActivityAndroid - 不同的 ActionBar 取决于选项卡式 Activity 中的 Fragment
【发布时间】:2015-08-19 23:18:35
【问题描述】:

标题说明了一切。我想知道是否可以根据选项卡式活动上显示的片段修改操作栏项目。如果可能的话,我该怎么做?

【问题讨论】:

    标签: android tabs android-actionbar fragment


    【解决方案1】:

    您可以使用Toolbar 而不是ActionBar
    http://javatechig.com/android/android-lollipop-toolbar-example
    您可以根据需要制作任意数量的工具栏,并按照 Сергей Боиштян 所描述的方式在 tabHost.setOnTabChangedListener(...) 上显示和隐藏它们。
    我发现工具栏比操作栏更容易定制且不那么凌乱

    【讨论】:

    • 如果您找到了选项卡工具栏的方法,那么正确的答案就是您的了。接受挑战了吗?
    • 哈哈,我上钩了。这实际上相当简单:您可以使用与 ViewPager 一起使用的 SlidingTabLayout github.com/google/iosched/blob/master/android/src/main/java/com/…。希望对您有所帮助。
    • 我提到 SlidingTabLayout 只是因为我喜欢这种效果,但实际上你可以使用默认的 Android 选项卡。
    • 太棒了!你在说服我。从美学上讲,它怎么样?
    • 看看我发送的链接上的那个例子。它看起来像一个 ActionBar,但您可以将其视为非常适合自定义的普通布局。您甚至可以为普通菜单图标和三点隐藏菜单类型提供 menu.xml。你可以做任何事情:)
    【解决方案2】:

    你可以这样做。

    public class UserTabsActivity extends BaseActivity implements TabHost.OnTabChangeListener {
    
    private MenuItem                       settingsItem;
    private MenuItem                       actionSearch;
    private SearchView                     searchView;
    private SearchView.OnQueryTextListener onQueryTextListener;
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.user_tabs_menu, menu);
        settingsItem = menu.findItem(R.id.settings_item);
        settingsItem.setOnMenuItemClickListener(this);
    
        actionSearch = menu.findItem(R.id.action_search);
        searchView = (SearchView) actionSearch.getActionView();
        searchView.setQueryHint(Constants.USER_HINT);
        searchView.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS);
        searchView.setOnQueryTextListener(onQueryTextListener);
        return true;
    }
    @Override
    public void onTabChanged(String tabId) {
        customize(tabId)
    }
    public void customize(String currentTab) {
        switch (currentTab) {
            case "sometag":
                settingsItem.setVisible(false);
                actionSearch.setVisible(true);
                break;
            default:
                settingsItem.setVisible(true);
                actionSearch.setVisible(false);
        }
    }
    

    在你的片段中你可以写一些逻辑

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
        FragmentTabHost tabHost = new FragmentTabHost(getActivity());
        tabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.content);
    
        tabHost.addTab(tabHost.newTabSpec("users").setIndicator("ПОЛЬЗОВАТЕЛИ"), SomeFragment.class, null);
        tabHost.addTab(tabHost.newTabSpec("posts").setIndicator("ПОСТЫ"), SomeFragment.class, null);
    
        tabHost.setOnTabChangedListener((TabHost.OnTabChangeListener) getActivity());
    
        return tabHost;
    }
    

    在那段代码中最重要的是 tabHost.setOnTabChangedListener(..) 和 UserTabsActivity 扩展 BaseActivity 实现 TabHost.OnTabChangeListener 这是可能性之一。希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多