下面的例子主要介绍action bar 的用法,以及它们是如何同其他action bar特性进行交互的。
public class FragmentTabs extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
bar.addTab(bar.newTab()
.setText("Simple")
.setTabListener(new TabListener<FragmentStack.CountingFragment>(
this, "simple", FragmentStack.CountingFragment.class)));
bar.addTab(bar.newTab()
.setText("Contacts")
.setTabListener(new TabListener<LoaderCursor.CursorLoaderListFragment>(
this, "contacts", LoaderCursor.CursorLoaderListFragment.class)));
bar.addTab(bar.newTab()
.setText("Apps")
.setTabListener(new TabListener<LoaderCustom.AppListFragment>(
this, "apps", LoaderCustom.AppListFragment.class)));
bar.addTab(bar.newTab()
.setText("Throttle")
.setTabListener(new TabListener<LoaderThrottle.ThrottledLoaderListFragment>(
this, "throttle", LoaderThrottle.ThrottledLoaderListFragment.class)));
if (savedInstanceState != null) {
bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("tab", getActionBar().getSelectedNavigationIndex());
}
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.detach(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.attach(mFragment);
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
ft.detach(mFragment);
}
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
Toast.makeText(mActivity, "Reselected!", Toast.LENGTH_SHORT).show();
}
}
}
分享到:
相关推荐
在这个教程中,我们将深入探讨如何在Android中实现Fragment Tabs,以及它们在导航中的作用。 1. **Fragment的理解**: - Fragment是Android应用中的可重用部分,可以单独存在或者嵌入到Activity中。它们提供了更细...
4. **创建TabHost和设置Tabs** 创建TabHost需要首先调用TabHost的setup()方法,然后使用TabSpec来定义每个Tab的标签和内容。每个TabSpec的content部分通常关联一个Intent,但在FragmentDemo-10中,我们将使用...
"andriod自定义的Tabs标签菜单(viewpager+fragment)"是一个很好的实践,它利用了ViewPager和Fragment来实现动态、可滑动的标签页效果。下面将详细讲解这一实现方式。 **一、ViewPager组件** ViewPager是Android ...
Fragment是Android应用开发中的一个重要组件,它是在Android 3.0(API级别11)引入的,用于构建可重用的、模块化的用户界面部分。在这个"Fragment实例-Android Studio项目"中,我们可以深入理解Fragment的使用方法...
<com.google.android.material.tabs.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:tabMode="fixed" /> ``` ```java ...
- 使用`androidx.viewpager.widget.ViewPager`和`com.google.android.material.tabs.TabLayout`库来实现滑动切换的Tab效果。 - `ViewPager`负责显示和切换Fragment,而`TabLayout`则用来展示Tab标签。 3. **创建...
在实际开发中,可以使用各种库来实现这种Tab和Fragment的交互,如`androidx.viewpager.widget.ViewPager`配合`com.google.android.material.tabs.TabLayout`,或者自定义实现。`ViewPager`用于在不同的Fragment间...
要使用TabLayout,你需要在布局XML文件中添加`com.google.android.material.tabs.TabLayout`元素,并设置相应的属性,如`android:id`,`app:tabMode`(定义Tab的模式,比如`fixed`或`scrollable`),以及`app:...
<com.google.android.material.tabs.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" /> // 在Activity的onCreate()方法中设置Tab ...
在`TabsDemo`中,ViewPager将负责管理各个Fragment的生命周期和显示。 3. **Fragment**:Fragment是Android应用中的一个模块化组件,它可以包含UI和其他功能。在选项卡布局中,每个Fragment代表一个独立的内容区域...
在`ActionBar`与`Fragment`结合使用时,通常会将`Fragment`的切换操作绑定到`ActionBar`的导航模式,例如使用tabs。以下是实现这种结合的基本步骤: 1. 创建`Fragment`类:定义每个`Fragment`的UI和逻辑,例如`...
`setNavigationMode()`设置导航模式,通常选择`NAVIGATION_MODE_TABS`或`NAVIGATION_MODE_LIST`来实现`Fragment`的切换。 3. **创建Tab或List项**:根据你在`ActionBar`中选择的导航模式,创建对应的Tab或List项。...
<com.google.android.material.tabs.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" /> ``` 在FragmentActivity中: ```java ...
在Android应用开发中,`Fragment`和`ActionBar`是两个重要的组件,它们被广泛用于构建交互丰富的用户界面。本篇文章将深入探讨如何利用这两个组件来实现tab标签切换页面的效果。 `Fragment`是Android SDK中的一个类...
<androidx.tabs.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" /> android:id="@+id/view_pager" android:layout_width="match...
android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> android:id="@android:id/tabcontent" android:layout_width="match_parent" android:...
在Android开发中,`ViewPager`和`Fragment`是两种非常重要的组件,它们广泛用于构建具有滑动页面效果的用户界面,比如选项卡式布局。在本教程中,我们将深入探讨如何将`ViewPager`与`Fragment`结合使用,以实现类似...
<com.google.android.material.tabs.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" /> android:id="@+id/view_pager" android:...
2. **设置ActionBar**:在主`Activity`的`onCreate`方法中,调用`getSupportActionBar()`获取`ActionBar`实例,然后通过`setNavigationMode()`方法将其设置为`NAVIGATION_MODE_TABS`。 3. **添加Tab**:使用`addTab...
<com.google.android.material.tabs.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" /...