0

私のプロジェクトにactionsherlockを正常に実装しました.soここに私のコードがあります:

public class ActiontabActivity extends SherlockFragmentActivity   {


    ActionMode mMode;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(R.style.Theme_Sherlock_Light_DarkActionBar);
        setContentView(R.layout.main);
         ActionBar bar = getSupportActionBar();
            bar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
            bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

            bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

            bar.setDisplayShowHomeEnabled(false);


            bar.setDisplayShowTitleEnabled(false);
            bar.setTitle("Currency Exchange");
            bar.addTab(bar
                    .newTab()
                    .setText("Converter")
                    .setTabListener(
                            new TabListener<Fragment>(this, "Converter",
                                    ConverterTab.class, null)));

            bar.addTab(bar
                    .newTab()
                    .setText("Favorites")
                    .setTabListener(
                            new TabListener1<Fragment>(this, "Favorites",
                                    FavoritesTab.class, null)));
            if (savedInstanceState != null) {
                bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
            }


    }


    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("tab", getSupportActionBar()
                .getSelectedNavigationIndex());
    }

    public class TabListener<T extends Fragment> implements ActionBar.TabListener {
        private final FragmentActivity mActivity;
        private final String mTag;
        private final Class<ConverterTab> mClass;
        private final Bundle mArgs;
        private Fragment mFragment;




        public TabListener(FragmentActivity activity, String tag, Class<ConverterTab> clz, Bundle args) {
            mActivity = activity;
            mTag = tag;
            mClass = clz;
            mArgs = args;
            FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();


            // Check to see if we already have a fragment for this tab, probably
            // from a previously saved state.  If so, deactivate it, because our
            // initial state is that a tab isn't shown.
            mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag);
            if (mFragment != null && !mFragment.isDetached()) {
                ft.detach(mFragment);
            }
        }




        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
             ft = mActivity.getSupportFragmentManager()
                        .beginTransaction();

                if (mFragment == null) {
                    mFragment = Fragment.instantiate(mActivity, mClass.getName(),
                            mArgs);
                    ft.add(android.R.id.content, mFragment, mTag);
                    ft.commit();
                } else {
                    ft.attach(mFragment);
                    ft.commit();
                }


        }




        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
               if (mFragment != null) {
                    //this segment removes the back history of everything in the tab you are leaving so when you click on the tab again you go back to a fresh start
                    FragmentManager man = mFragment.getFragmentManager();
                    if(man.getBackStackEntryCount()>0) //this check is required to prevent null point exceptions when clicking off of a tab with no history
                        man.popBackStack(man.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE); //this pops the stack back to index 0 so you can then detach and then later attach your initial fragment
                    //also it should be noted that if you do popbackstackimmediate here instead of just popbackstack you will see a flash as the gui changes back to the first fragment when the code executes
                    //end
                    ft.detach(mFragment);
                }



        }




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

        }



    }
    public class TabListener1<T extends Fragment> implements ActionBar.TabListener {
        private final FragmentActivity mActivity;
        private final String mTag;
        private final Class<FavoritesTab> mClass;
        private final Bundle mArgs;
        private Fragment mFragment;




        public TabListener1(FragmentActivity activity, String tag, Class<FavoritesTab> clz, Bundle args) {
            mActivity = activity;
            mTag = tag;
            mClass = clz;
            mArgs = args;
            FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();


            // Check to see if we already have a fragment for this tab, probably
            // from a previously saved state.  If so, deactivate it, because our
            // initial state is that a tab isn't shown.
            mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag);
            if (mFragment != null && !mFragment.isDetached()) {
                ft.detach(mFragment);
            }
        }




        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
             ft = mActivity.getSupportFragmentManager()
                        .beginTransaction();

                if (mFragment == null) {
                    mFragment = Fragment.instantiate(mActivity, mClass.getName(),
                            mArgs);
                    ft.add(android.R.id.content, mFragment, mTag);
                    ft.commit();
                } else {
                    ft.attach(mFragment);
                    ft.commit();
                }


        }




        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
             if (mFragment != null) {
                    //this segment removes the back history of everything in the tab you are leaving so when you click on the tab again you go back to a fresh start
                    FragmentManager man = mFragment.getFragmentManager();
                    if(man.getBackStackEntryCount()>0) //this check is required to prevent null point exceptions when clicking off of a tab with no history
                        man.popBackStack(man.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE); //this pops the stack back to index 0 so you can then detach and then later attach your initial fragment
                    //also it should be noted that if you do popbackstackimmediate here instead of just popbackstack you will see a flash as the gui changes back to the first fragment when the code executes
                    //end
                    ft.detach(mFragment);
                }


        }




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

        }



    }
}

そして、コンバータータブにボタンを1つ、お気に入りタブにチェックボックスを1つ配置しました。しかし、アプリを実行すると、最初はどのタブも選択されていませんでした。メイン画面を表示するだけで、タブを押すと、その内容が表示されます。タブが選択されていないときに他のコンテンツを表示したかった.どうすればこれを行うことができるか教えてください?最初にメイン画面を表示し、次に任意のタブを選択するとそのコンテンツを表示する方法を教えてください.私の画像を添付しました事業:

ここに画像の説明を入力 ここに画像の説明を入力

4

3 に答える 3

2

これは次の方法で行うことができます。

bar.addTab(yourTab,false);

このように、タブは視覚的に選択されたままですが、リスナーのメソッド onTabSelected のアクションは実行されません。

于 2012-07-22T09:30:10.047 に答える
0

残念ながら、タブを作成しているとき、Android はすべてのタブを選択済みとしてマークする必要があります。しかし、私にはいくつかのアイデアがあります。

最初。内容を入れ替えることができます。ブールフラグを作成し、タブが選択されたときにその値を変更するだけです。したがって、フラグが false の場合 (たとえば)、メイン画面にコンテンツを表示できます。

または2番目のアイデア。メイン画面用のタブとコンテンツを使用して、別のメイン アクティビティを作成するだけです。そして、任意のタブが選択されたら、実際のタブでアクティビティを実行してください。

申し訳ありませんが私の英語。何かが不明な場合があります。だから私に聞いてください、私はそれをより明確に説明しようとします。

于 2012-07-11T20:31:55.330 に答える