Подтвердить что ты не робот

На вкладках Android ActionBar установлена ​​первоначально выбранная вкладка

Я заметил, что при использовании

actionBar.setSelectedNavigationItem(x)

в методе onCreate() моей активности, элемент табуляции в позиции 0 всегда выбирается первым, а затем загружается элемент табуляции в позиции x. Это означает, что (поскольку я использую фрагменты) 2 Фрагменты загружаются. Один из них не нужен...

Здесь мой код:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Determine which bundle to use; either the saved instance or a bundle
    // that has been passed in through an intent.
    Bundle bundle = getIntent().getExtras();
    if (bundle == null) {
        bundle = savedInstanceState;
    }

    // Initialize members with bundle or default values.
    int position;
    if (bundle != null) {
        position = bundle.getInt("selected_tab");
    } else {
        position = 0;
    }

    // Set the tabs.
    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Tab tab = actionBar
            .newTab()
            .setText("Tab 1")
            .setTabListener(
                    new TabListener<RendersGridFragment>(this, "1",
                            RendersGridFragment.class));
    actionBar.addTab(tab);

    tab = actionBar
            .newTab()
            .setText("Tab 2")
            .setTabListener(
                    new TabListener<RendersGridFragment>(this, "2",
                            RendersGridFragment.class));
    actionBar.addTab(tab);

    tab = actionBar
            .newTab()
            .setText("Tab 3")
            .setTabListener(
                    new TabListener<RendersGridFragment>(this, "3",
                            RendersGridFragment.class));
    actionBar.addTab(tab);

    actionBar.setSelectedNavigationItem(position);
}

Кажется, что вкладка в позиции 0 выбирается изначально по умолчанию. Но, как вы можете видеть, я передаю пакеты, чтобы убедиться, что последняя выбранная вкладка по-прежнему выбрана, когда снова запущен метод onCreate().

Например, если последняя выбранная вкладка находится в позиции 2, запускается функция onCreate(), а вкладка в позиции равна 0, тогда загружается вкладка в позиции 2.

Как я могу убедиться, что ActionBar не выбирает вкладку в позиции 0 сначала при использовании actionBar.setSelectedNavigationItem(position).

4b9b3361

Ответ 1

Используйте другие вызовы addTab, чтобы переопределить это поведение. Вам нужно будет сначала добавить вкладку, которую вы хотите выбрать (в вашем случае вкладка в позиции 2). Релевантный Javadoc

actionBar.addTab(tab2);
actionBar.addTab(tab0, 0, false);
actionBar.addTab(tab1, 1, false);

Ответ 2

Для других, кто хочет это сделать, вы также можете установить вкладку, выбрав ее, а затем установите значение true или false, чтобы указать, какая вкладка должна быть выбрана.

actionBar.addTab(tab1, 0, false);
actionBar.addTab(tab2, 1, true);
actionBar.addTab(tab3, 2, false);

Вот документы по этому подходу: http://developer.android.com/reference/android/app/ActionBar.html#addTab (android. app.ActionBar.Tab, int, boolean)

Ответ 3

вы можете использовать ниже statment в activtiy onStart:

protected void onStart() {
    super.onStart();
    actionBar.selectTab(mainTab);
}

какая переменная mainTab имеет тип Tab. таким образом вам нужно определить вкладки как общедоступные переменные, такие как:

Tab mainTab, tab2,tab3;

@Override
protected void onCreate(Bundle savedInstanceState) {
    //add tabs to action bar
    ....
}

Ответ 4

Если у вас есть 3 вкладки (т.е. вкладка 0, вкладка 1, вкладка 2) и хотите, чтобы вкладка 1 была предварительно выбрана. Сделайте это:

for (int i = 0; i < mFragmentPagerAdapter.getCount(); i++) {
    boolean preselected = (i == 1);
    actionBar.addTab(actionBar.newTab().setText(
        mFragmentPagerAdapter.getPageTitle(i)).setTabListener(this), preselected);
}

Вы будете использовать:

public abstract void addTab (ActionBar.Tab tab, boolean setSelected)

согласно этой спецификации API.

Ответ 5

Ответ на bkurzius помог мне решить проблему, с которой я столкнулся с той же проблемой.

Что я сделал:

private final String TAB_SELECTED = "tab_selected"
...
private int mTabSelected;
...
mTabSelected = savedInstanceState.getInt(TAB_SELECTED);
...
final ActionBar actionbar = getActionBar();
...
actionbar.addTab(tab1, mTabSelected == 0);
actionbar.addTab(tab2, mTabSelected == 1);
actionbar.addTab(tab3, mTabSelected == 2);
...
outState.putInt(TAB_SELECTED, getActionBar().getSelectedNavigationIndex());

Таким образом, параметр setSelected является истинным, только если mTabSelected равен индексу табуляции.

Ответ 6

Перси Вега ответ кажется лучшим рабочим решением.

    for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {

        boolean preselected = (i == ErrorDetails.tab_id);
        actionBar.addTab(
                actionBar.newTab()
                        .setText(mSectionsPagerAdapter.getPageTitle(i))
                        .setTabListener(this),preselected);
    }