Изменение текста вкладки на вкладке «Сотовая панель действий» после ее создания - PullRequest
5 голосов
/ 27 апреля 2011

Я пытаюсь привыкнуть к Android Honeycomb, создав простое приложение для редактирования текста, которое использует панель действий и вкладки. Я сталкиваюсь с раздражающей проблемой все же. После того, как вкладка была создана и добавлена ​​на панель действий, я бы хотел изменить текст, отображаемый на вкладке. Я думал, что с помощью следующего метода ActionBar.Tab.setText (CharSequence arg0) добьется цели, но, похоже, он не меняет видимый текст. Что еще более странно, так это то, что если я вызову getText (), он возвращает текст, на который я изменил вкладку. Ниже приведен фрагмент кода, который я использую для изменения текста вкладки:

int currentTabIndex = ab.getSelectedNavigationIndex();
currentTabTitle = (String) ab.getTabAt(currentTabIndex).getText();  // just to check
ab.getTabAt(currentTabIndex).setText(fileName);                     // change tab text
currentTabTitle = (String) ab.getTabAt(currentTabIndex).getText();  // just to check

Я действительно в растерянности и искал везде. Я был бы очень признателен за любой совет, который кто-либо имеет. Спасибо за ваше время.

Ответы [ 2 ]

10 голосов
/ 19 декабря 2011

Это глупая проблема, и добавление и удаление вкладок - плохая идея, потому что, если вы используете фрагменты, вы в конечном итоге удалите и повторно добавите свой фрагмент с его вкладкой.Использование пользовательского представления, кажется, работает намного лучше, и в качестве дополнительного бонуса вы получаете большую настройку.

Вот как сделать вкладку с пользовательским представлением, которое будет выглядеть и вести себя идентично стандартному:

ActionBar bar = getActionBar();

TabListener tabListener = new TabListener() {

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }
};

Tab tab1 = bar.newTab()
          .setText("Info")
          .setTabListener(tabListener)
          .setCustomView(makeTabDummy("Info", android.R.drawable.ic_menu_info_details));

bar.addTab(tab1);

и вот идеальный пиксельфиктивный вид:

private TextView makeTabDummy(String text, int icon) {

    TextView tv = new TextView(this);
    tv.setText(text);
    tv.setTextColor(0xffffffff);
    tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
    tv.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT));
    tv.setCompoundDrawablesWithIntrinsicBounds(icon, 0, 0, 0);
    tv.setGravity(Gravity.CENTER);

    return tv;
}

Отсюда мы можем без проблем менять значки и текст на вкладке.Пример:

TextView tv = (TextView) tab1.getCustomView();          
tv.setText("change the text!");
tv.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.btn_star_big_on, 0, 0, 0);

... и все работает как надо

0 голосов
/ 27 апреля 2011

Попробуйте удалить вкладку и заново добавить ее по желаемому индексу после изменения текста.(Это ошибка. Связанное представление не обновляется, когда вы устанавливаете текст после добавления.)

...