为活动栏中的每个选项卡调用单独活动的主要活动(support.v7)

时间:2013-11-28 12:07:03

标签: android android-fragments android-actionbar-compat

我正在使用带有4个标签的actionbar(support.v7)。我希望每个标签都有一个单独的活动而不是一个调用片段的常见活动?

ApplicationMainTabsActivity

public class ApplicationMainTabsActivity extends ActionBarActivity {
    ActionBar.Tab Tab1, Tab2, Tab3,Tab4;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        String label1 = getResources().getString(R.string.label1);
        Tab1 = actionBar.newTab();
        Tab1.setText(label1);
        ApplicationTabListener<Fragment1> tl = new ApplicationTabListener<Fragment1>(this,label1, Fragment1.class);
        Tab1.setTabListener(tl);
        actionBar.addTab(Tab1);

        String label2 = getResources().getString(R.string.label2);
        Tab2 = actionBar.newTab();
        Tab2.setText(label2);
        ApplicationTabListener<Fragment2> t2 = new ApplicationTabListener<Fragment2>(this,label2, Fragment2.class);
        Tab2.setTabListener(t2);
        actionBar.addTab(Tab2);

        String label3 = getResources().getString(R.string.label3);
        Tab3 = actionBar.newTab();
        Tab3.setText(label3);
        ApplicationTabListener<Fragment3> t3 = new ApplicationTabListener<Fragment3>(this,label3, Fragment3.class);
        Tab3.setTabListener(t3);
        actionBar.addTab(Tab3);

        String label4 = getResources().getString(R.string.label4);
        Tab4 = actionBar.newTab();
        Tab4.setText(label4);
        ApplicationTabListener<Fragment4> t4 = new ApplicationTabListener<Fragment4>(this,label4, Fragment4.class);
        Tab4.setTabListener(t4);
        actionBar.addTab(Tab4);
    }

ApplicationTabListener.java

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


    /**

     * Constructor used each time a new tab is created.
     * 
     * @param activity
     *            The host Activity, used to instantiate the fragment
     * @param tag
     *            The identifier tag for the fragment
     * @param clz
     *            The fragment's Class, used to instantiate the fragment
     */

    public ApplicationTabListener(Activity activity, String tag, Class<T> clz) {
        this(activity, tag, clz, null);
    }






 public ApplicationTabListener(Activity activity, String tag, Class<T> clz, Bundle args) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
        mArgs = args;
    }




    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // Check if the fragment is already initialized
        if (mFragment == null) {
            // If not, instantiate and add it to the activity
            mFragment = Fragment.instantiate(mActivity, mClass.getName());
            ft.add(R.id.action_bar_activity_content, mFragment, mTag);
        } else {
            // If it exists, simply attach it in order to show it
            ft.replace(R.id.action_bar_activity_content,mFragment);
       }
    }



    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            // Detach the fragment, because another one is being attached
          ft.remove(mFragment);

        }
  }



    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // User selected the already selected tab. Usually do nothing.
    }
}

Fragment1.java

public class Fragment1 extends Fragment{
     @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            return inflater.inflate(R.layout.main, container, false);
        }

}

1 个答案:

答案 0 :(得分:0)

您不能为TabActivity中的每个Tab提供单独的活动。它被弃用了。您需要附加片段才能使用它。否则,您需要构建自己的自定义TabActivity。