android - 如何在仅在特定 fragment 上可见的 ViewPage 操作栏上添加导航列表?

标签 android navigation android-actionbar android-viewpager spinner

我有一个包含 3 个 fragment 的 ViewPager。我可以只为我想要的 fragment 有选择地设置操作栏菜单选项。

同样,我想通过 ActionBar 中的 Spinner 提供一个导航列表。同样,导航列表应该只出现在 ViewPager 的一个 fragment 中,而不应该出现在所有 fragment 中。但是我的尝试失败了。导航列表出现在操作栏中,但对于所有 fragment 都保留在那里。

下面是我在 ViewPager 中使用的 fragment 之一。我希望导航列表仅在我在 View 中滑动此 fragment 时出现。

public class TransactionsFragment extends SherlockFragment implements
    ActionBar.OnNavigationListener{

    private ActionBar mActionBar;

    @SuppressLint("NewApi")
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        ViewGroup rootView = (ViewGroup) inflater.inflate(
                R.layout.fragment_transactions, container, false);

        // Set up the action bar to show a dropdown list
        mActionBar = getActivity().getActionBar();
        mActionBar.setDisplayShowTitleEnabled(false);
        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

        final String[] dropdownValues = {"Test","Old"};

     // Specify a SpinnerAdapter to populate the dropdown list

        ArrayAdapter<String> adapter = null;
        if(android.os.Build.VERSION.SDK_INT >= 14) {
            adapter = new ArrayAdapter<String>(mActionBar.getThemedContext(),
                    android.R.layout.simple_spinner_item, android.R.id.text1,
                    dropdownValues);
        } else {
            adapter = new ArrayAdapter<String>(getActivity().getBaseContext(),
                    android.R.layout.simple_spinner_item, android.R.id.text1,
                    dropdownValues);
        }

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // Set up the dropdown list navigation in the action bar.
        mActionBar.setListNavigationCallbacks(adapter, this);

        return rootView;
    }

如何限制导航列表仅在该 fragment 可见时显示?

最佳答案

我和 OP 有同样的需求,并使用了 Matthias 建议的方法,以及来自其他来源的位。对我来说,作为 Android 的新手,这是一个挑战。我将提供更多详细信息,这可能对通过搜索到达此处的其他人有所帮助。

这方面的所有代码都在显示导航微调器的一个 fragment 中。其他 fragment 没有困惑。

private ActionBar actionBar;


public void onResume() {
    super.onResume();

    if(actionBar==null) {

        actionBar = getActivity().getActionBar();

        // get spinner items defined in values/strings/dropdown
        final String[] dropdownValues = getResources().getStringArray(R.array.dropdown);

        // set up the actionbar appearance
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

        // Specify a SpinnerAdapter to populate the dropdown list.
        ArrayAdapter<String> aAdapter = new ArrayAdapter<String>(actionBar.getThemedContext(),
                android.R.layout.simple_spinner_item, android.R.id.text1,dropdownValues);

        aAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // setup for callbacks to detect item selection
        actionBar.setListNavigationCallbacks(aAdapter, this);
    }
}

 @Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {

    //System.err.println("Spinner selection: " + itemPosition);
    //do stuff based on itemPosition

    return false;
}

最后,打开和关闭导航微调器的更完整代码:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (actionBar!=null) {
        if (isVisibleToUser) {
            actionBar.setDisplayShowTitleEnabled(false);
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        }
        else  {
            actionBar.setDisplayShowTitleEnabled(true);
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        }
    }
}

编辑:另外,Fragment 必须像这样实现 ActionBar.OnNavigationListener...

public class DisplayStuffFragment extends Fragment implements ActionBar.OnNavigationListener {

...
}

关于android - 如何在仅在特定 fragment 上可见的 ViewPage 操作栏上添加导航列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16864706/

相关文章:

android - 如何在 fragment 内的 webview 中控制导航历史记录

android - 生成用于代码分发的混淆 JAR

android - 无法安装 AVD 设备未找到错误

java - Android 物理/电容式导航按钮

Android ActionBarCompat - 具有多个 fragment 的抽屉导航

java - 如何在 java 中为 ValueRange 变量赋值?

ios - 如何删除内容和弹出箭头之间的白色区域ios

html - CSS动态水平导航菜单填满特定宽度(表格行为)

android - 如何在自定义操作栏上获取 onClickListener() 事件

java - 操作栏选项卡的自定义位置