【发布时间】:2012-05-07 05:15:01
【问题描述】:
我没有使用过android 3.0+,也没有使用action bar,所以我对可以在action bar 中实现的选项卡有疑问。它是否仅限于更改片段?标签可以是:第一个活动,第二个片段吗?从我检查的示例中,有一个具有操作栏的主要活动,并且每个选项卡的内容是一个单独的片段。如果我的问题很明显,对不起。提前谢谢你。
【问题讨论】:
标签: android tabs android-actionbar
我没有使用过android 3.0+,也没有使用action bar,所以我对可以在action bar 中实现的选项卡有疑问。它是否仅限于更改片段?标签可以是:第一个活动,第二个片段吗?从我检查的示例中,有一个具有操作栏的主要活动,并且每个选项卡的内容是一个单独的片段。如果我的问题很明显,对不起。提前谢谢你。
【问题讨论】:
标签: android tabs android-actionbar
我没有看到您使用 Activity 作为第一个使用 Fragments 的优势?片段非常强大,可以提供与 Activity 一样多的功能。
话虽如此,您应该能够在选择 Tab 时获得回调,因此在该回调中您所要做的就是加载一个 Activity。确保在加载新 Activity 时传入当前选择的选项卡,以便用户可以看到选择了哪个选项卡。
使用 Fragment 的原因是您不必加载新的 Activity,并且可以用新的 Content 替换当前的 Fragment。
【讨论】:
没有任何内容说您必须切换片段,即使基本代码的结构使其易于操作。
例如,我只是使用选项卡来更改一次加载的视图布局层次结构中元素的可见性,并且效果很好。如果您的视图层次结构不那么复杂,这似乎更有效,因为它消除了片段事务。据推测,更改视图的可见性非常有效。
这是一个不完整的代码片段,让您了解如何忽略片段事务并做自己的事情:
public class AudioManagerTabListener<T extends Fragment> implements
ActionBar.TabListener {
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
switch ((Integer) tab.getTag()) {
case TAG_SHARED:
mGridViewWrapper.setVisibility(View.VISIBLE);
break;
case TAG_PLAYING:
mNowPlayingWrapper.setVisibility(View.VISIBLE);
break;
case TAG_PLAYLIST:
break;
case TAG_ARTISTS:
break;
case TAG_ALBUMS:
break;
case TAG_SONGS:
break;
}
if (DBG.AUDIO) {
Log.d(TAG,
"SettingsTabListener- onTabSelected - Tag: "
+ tab.getText());
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
switch ((Integer) tab.getTag()) {
case TAG_SHARED:
mGridViewWrapper.setVisibility(View.GONE);
break;
case TAG_PLAYING:
mNowPlayingWrapper.setVisibility(View.GONE);
break;
case TAG_PLAYLIST:
break;
case TAG_ARTISTS:
break;
case TAG_ALBUMS:
break;
case TAG_SONGS:
break;
}
if (DBG.AUDIO) {
Log.d(TAG,
"SettingsTabListener- onTabUnSelected - Tag: "
+ tab.getText());
}
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
if (DBG.AUDIO) {
Log.d(TAG, "SettingsTabListener- onTabReselected- Position: "
+ tab.getPosition());
}
}
}
【讨论】: