0

Android Support Library を使用して 3.0 以前のデバイス用の ActionBar を含めるプロジェクトがあります。

プロジェクトにはタブもあります。タブはFragments. android.support.v4.app.Fragmentこのようにして、サポート ライブラリのクラスからすべてのタブを拡張します。

ただし、3.0 より前のデバイスには問題があります。アクションバーが表示されていません。そのため、タブもありません。

解決策が見つかりません....

したがって、私の「メイン アクティビティ」(タブで ActionBar を処理する) は次のようになります。

public class Hauptmenue_extended extends ActionBarActivity implements
        OnClickListener {
actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Tab tabB = actionBar.newTab();
    tabB.setText("Home");
    tabB.setIcon(R.drawable.icon_home);
    tabB.setTabListener(new TabListener<Startmenue_activity>(this, "Start",
            Startmenue_activity.class));
    actionBar.addTab(tabB);

    Tab tabA = actionBar.newTab();
    tabA.setText("");
    tabA.setIcon(R.drawable.icon_nachrichten_sel);
    tabA.setTabListener(new TabListener<Nachrichten_activity>(this,
            "Nachrichten", Nachrichten_activity.class));
    actionBar.addTab(tabA);

    Tab tabC = actionBar.newTab();
    tabC.setText("");
    tabC.setIcon(R.drawable.icon_favoriten);
    tabC.setTabListener(new TabListener<Favoriten_activity>(this,
            "Favoriten", Favoriten_activity.class));
    actionBar.addTab(tabC);

そして、私の TabListener は次のようになります。

public static class TabListener<T extends Fragment> implements
        ActionBar.TabListener {

    private final FragmentActivity myActivity;
    private final String myTag;
    private final Class<T> myClass;

    public TabListener(FragmentActivity activity, String tag, Class<T> cls) {
        myActivity = activity;
        myTag = tag;
        myClass = cls;
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {

        Fragment myFragment = myActivity.getSupportFragmentManager()
                .findFragmentByTag(myTag);

        // Check if the fragment is already initialized
        if (myFragment == null) {
            // If not, instantiate and add it to the activity
            myFragment = Fragment
                    .instantiate(myActivity, myClass.getName());
            ft.add(android.R.id.content, myFragment, myTag);
        } else {
            // If it exists, simply attach it in order to show it
            ft.attach(myFragment);
        }

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {

        Fragment myFragment = myActivity.getSupportFragmentManager()
                .findFragmentByTag(myTag);

        if (myFragment != null) {
            // Detach the fragment, because another one is being attached
            ft.detach(myFragment);
        }

    }

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

    }

}

すべてのフラグメントまたはタブは次のようになります。

public class Nachrichten_activity extends Fragment implements
    OnChildClickListener, OnClickListener { ...

誰にもアイデアはありますか?:)

4

1 に答える 1

0

いくつかの指針、何があなたの問題を解決するのか確信が持てません

  • @style/Theme.AppCompat.Light を使用します (あなたの例では .Base は何ですか?)
  • フラグメントに「_activity」という名前を付けないでください。紛らわしいだけです。
  • サポート ライブラリのバグにより、ICS 以前は android.R.id.content の代わりに R.id.action_bar_activity_content を使用します。これは、以降のバージョンで修正される予定です。
  • onTabSelected で ft.replace() を使用する
于 2013-10-29T03:38:53.207 に答える