7

sherlock アクションバーでタブ ナビゲーションを使用するベスト プラクティスを探しています。フラグメントを変更し、バックスタックにフラグメントを追加し、別のタブが選択されたときにバックスタックをクリアする適切な方法は何ですか?

それを正しく行う方法を示す良い例やオープンソース プロジェクトはありますか?

4

4 に答える 4

6

Edgar が述べたように、Android ナビゲーション ガイドは開始するのに適した場所です。ただし、タブが Android でどのように機能するかについてコメントを追加さ​​せてください。

新しい acitonbar タブは、Google Play アプリで機能するのと同じ方法で実装する必要があります。これは、タブ内の一部のコンテンツの詳細が必要になるとすぐに、新しいビュー/フラグメント/アクティビティに移動し、タブが消えることを意味します。

そのため、Android のタブは常に表示されるのではなく、最上位の階層にのみ表示されます。ユーザーのナビゲーションを容易にする場合は、上へのボタンを実装して、ユーザーがタブが表示されている最上位の階層にすばやく戻ることができるようにします。

チュートリアルとサンプル

私の個人的なお気に入りの例とチュートリアルは、Google Web ページのアクションバー チュートリアルの下にあるタブ チュートリアルです。

タブ ナビゲーションの例は、android-sdk に付属のサンプル プロジェクトにも含まれています。次の場所に移動して、次android-sdk\extras\android\support\samples\Support4Demos\src\com\example\android\supportv4\app を探します:FragmentTabs.javaまたはFragmentTabsPager.java.

ActionBarSherlock を使用する場合は、ActionBarSherlock をダウンロードして、/samples ディレクトリのサンプル フォルダーを確認することもできます。と にタブのデモがTabNavigation.javaありTabNavigationCollapsed.javaます。アクションバーのチュートリアルを試してみるべきだと思いますが。

バックスタック付きタブ

また、常に表示されるタブバーが必要だとしましょう (ただし、お勧めしません)。次に、各タブのカスタム バック スタックを作成する必要があります。これを実装する方法の例については、こちらを参照してください。

マップとタブ

マップを使用するすべての Google アプリをご覧ください。Google はオーバーフロー アクションバー ボタンを使用してナビゲートします。開発者として私たちもそうすべきですが、Google mapsv2 for Android タブを使用すると、必要に応じて地図付きのタブがはるかに簡単になります。

于 2012-10-31T09:22:42.277 に答える
6

私はそれを行うためにABSを直接使用しません。タブでフラグメントの切り替えなどが必要になると、問題が発生します。これを行うための正しいアプローチは、ABS と互換性のある ViewPagerIndicator を使用することだと思います。おまけとして、タブ間で左右にスワイプすることもできます。compat パッケージ (ABS の場合と同様) が必要です。使用例は、 samples フォルダーにあります。

于 2012-10-29T20:56:26.327 に答える
1

私はフラグメントとタブを使用して 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 を独自のフラグメントに変更する必要がある場所。setTargetFragment を使用して、このタブフラグメントの 1 つに DialogFragment を追加することもできますが、これはあなたの質問ではないと思います。

于 2012-10-31T15:10:00.527 に答える
0

ナビゲーション用の Android デザイン パターンに従うことをお勧めします。

http://developer.android.com/design/patterns/navigation.html

于 2012-10-31T08:39:07.367 に答える