Android - 不同的ActionBar取决于选项卡式Activity中的Fragment

时间:2015-08-19 23:18:36

标签: android tabs android-actionbar fragment

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

你可以这样做。

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 这是其中一种可能性。我希望,这是有帮助的