我正在尋找與sherlock操作欄一起使用選項卡導航的最佳做法。 什麼是正確的方式更改片段,並添加片段到堆棧和清除後堆棧時選擇另一個選項卡。標籤導航的最佳做法?
是否有任何好的示例或開源項目顯示如何正確使用它?
我正在尋找與sherlock操作欄一起使用選項卡導航的最佳做法。 什麼是正確的方式更改片段,並添加片段到堆棧和清除後堆棧時選擇另一個選項卡。標籤導航的最佳做法?
是否有任何好的示例或開源項目顯示如何正確使用它?
我不會直接使用ABS來做到這一點。一旦你的標籤需要分片切換等,你會遇到麻煩。我認爲正確的做法是使用ViewPagerIndicator,它與ABS兼容。作爲獎勵,您還可以在選項卡之間左右滑動。 您需要compat軟件包(例如ABS),您可以在 samples folder中找到示例用法。
我建議你遵循了Android設計模式導航:
http://developer.android.com/design/patterns/navigation.html
埃德加·提到android navigation guide是一個良好的開端。但讓我添加一些意見,以標籤如何打算與Android的工作。
新的acitonbar選項卡應該以與在Google Play應用中工作的方式相同的方式實現。這意味着一旦你想要一個標籤內的一些內容的一些細節,你會去一個新的視圖/片段/活動和標籤將消失。
所以android的標籤不應該始終可見,但只能在頂級層次結構中顯示。如果您想要簡化用戶的導航,您需要實施向上按鈕,以便用戶可以快速返回到頂部層次結構,其中標籤可見。
教程和樣本
我個人最喜歡的例子和教程是關於谷歌網頁上的動作條教程下tabs tutorial。
標籤導航的示例也可以在android-sdk附帶的示例項目中找到。轉到:android-sdk\extras\android\support\samples\Support4Demos\src\com\example\android\supportv4\app
並尋找:FragmentTabs.java
或FragmentTabsPager.java
。
如果您想使用ActionBarSherlock,您也可以使用download ActionBarSherlock並查看/ samples目錄中的samples文件夾。在那裏你有TabNavigation.java
和TabNavigationCollapsed.java
標籤演示。雖然我認爲你應該給Actionbar教程一個鏡頭。
標籤背部棧
還可以說你想有一個是可見的所有(但不建議它)的時間標籤欄。然後,您必須爲每個選項卡創建一個自定義備用堆棧,您可以查看here以獲取如何實現該選項的示例。
地圖和標籤
看看使用地圖的所有谷歌應用程序。谷歌使用溢出操作欄按鈕來瀏覽。因此,如果任何人想要這樣做,我們應該像開發人員一樣,但使用Google mapsv2 for Android標籤與地圖變得更容易。
它真的幫助我!謝謝! –
我已經做了ActionbarSherlock與碎片和標籤多次,它的工作奇妙。
你需要一個TabListener:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.android.wifilogger.R;
public class WifiTabListener implements ActionBar.TabListener {
public Fragment fragment;
public MainTabActivity act;
public WifiTabListener(Fragment fragment, MainTabActivity act) {
this.fragment = fragment;
this.act = act;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.root, fragment);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(fragment);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}
和設置TabActivity:
public class MainTabActivity extends SherlockFragmentActivity {
public ActionBar actionBar;
private ActionBar.Tab listTab;
public MenuItem refreshItem;
private SherlockFragment listFragment;
private SherlockFragment mapFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// getActionBar().setDisplayHomeAsUpEnabled(true);
actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
setContentView(R.layout.main);
ActionBar.Tab settingsTab = actionBar.newTab().setText("Settings")
.setTag("settings");
listTab = actionBar.newTab().setText("Wifi List")
.setTag("list");
ActionBar.Tab mapTab = actionBar.newTab().setText("Map").setTag("map");
SherlockFragment settingsFragment = new SettingsFragment();
listFragment = new WifiListFragment();
mapFragment = new WifiMapFragment();
settingsTab.setTabListener(new WifiTabListener(settingsFragment, this));
listTab.setTabListener(new WifiTabListener(listFragment, this));
mapTab.setTabListener(new WifiTabListener(mapFragment, this));
actionBar.addTab(listTab,false);
actionBar.addTab(mapTab,false);
actionBar.addTab(settingsTab,false);
actionBar.selectTab(listTab);
}
,你必須改變SettingsFragment,MapFragment和ListFragment到自己的片段。您也可以在此tabfragments一個由USNG setTargetFragment添加DialogFragment但是這不是你的問題,我猜。
但是,有沒有辦法片段添加到一個視圖尋呼機返回堆疊?現在我正在爲每個選項卡管理自己的片段堆棧。 – meh
我還沒有這樣的情況。我想這很大程度上取決於你如何希望後臺行爲。如果您只想在選項卡中保留歷史記錄,則可以註冊更改頁面事件並清除後臺堆棧。如果你希望後退按鈕也能讓你回到其他標籤中,它肯定會變得更加複雜。但是,使用本地標籤方法也不應該這麼容易。 – stoilkov
能否請您添加到您的答案實現ViewPagerIndicator的一些基本的例子嗎? 什麼包,我需要使用它的工作像2.2較舊的Android版本。 – meh