5

アクションバーとタブを利用する単純なテキスト編集アプリケーションを作成して、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

私は本当に途方に暮れており、どこでも検索しました。誰でもアドバイスをいただければ幸いです。御時間ありがとうございます。

4

2 に答える 2

10

これは一種のばかげた問題であり、タブを追加および削除することは悪い考えです。フラグメントを使用している場合、そのタブを使用してフラグメントを削除および再追加することになります。カスタムビューを使用すると、はるかにうまく機能するようであり、追加のボーナスとして、より優れたカスタマイズが可能になります。

デフォルトのビューと同じように表示および動作するカスタムビューを使用してタブを作成する方法は次のとおりです。

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);

...そしてすべてが正常に機能します

于 2011-12-19T18:21:39.720 に答える