0

我想要一个程序,它应该包含一个带有 4 个选项卡的视图,每个选项卡都有不同的内容(例如:1° 选项卡 = 地图、2° 选项卡 = 文本等)。我对这些项目有点陌生,而且我处于成功导入并使用地图启动应用程序的位置。如果您认为使用 Tabs 以外的其他东西更好,我同意您的看法,因为我找不到任何相关信息。

4

1 回答 1

1

如果您有任何超过三个左右的选项卡,导航选项卡可能不是一个理想的选择。

您可以尝试sideNavigationMenu或其他一些滑动菜单库。如果您刚刚开始,我发现 sideNavigationMenu 是最容易使用的库。

无论如何,如果您想继续使用导航选项卡,下面是一些示例代码,可帮助您入门。

public class MainActivity extends Activity{

public static Context appContext;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    appContext = getApplicationContext();


   //ActionBar
    ActionBar bar = getActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    bar.addTab(bar.newTab()
            .setText("Map Fragment")
            .setTabListener(new TabListener<MapSampleFragment>(
                    this, "map_fragment", MapSampleFragment.class)));

    bar.addTab(bar.newTab()
            .setText("List Fragment")
            .setTabListener(new TabListener<LocationListFragment>(
                    this, "list_fragment", LocationListFragment.class)));



    bar.addTab(bar.newTab()
            .setText("Other Fragment")
            .setTabListener(new TabListener<MoreStuffFragment>(
                    this, "more_stuff_fragment", MoreStuffFragment.class)));  

}

然后,您需要编写 TabListener 来处理片段之间的切换。由于您使用的是 Google Maps Android,因此最好隐藏您的片段并在需要时显示它们,而不是分离和附加片段。

除了使用 .show() 和 .hide() 之外,这几乎是从 API 演示中获取的代码

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

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

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

        // 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.getFragmentManager().findFragmentByTag(mTag);
        if (mFragment != null && !mFragment.isDetached()) {
            FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
            ft.hide(mFragment);
            ft.commit();
        }
    }

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        if (mFragment == null) {
            mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            ft.show(mFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            ft.hide(mFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        Toast.makeText(mActivity, "Reselected!", Toast.LENGTH_SHORT).show();
    }
}
于 2013-04-11T15:35:25.923 回答