7

各タブにアクティビティ グループを実装したい Android アプリに取り組んでいます。しかし、Activity Group は廃止されたため、Fragments を使用する必要があります。私は最後の日をグーグルで検索し、そのトピックについていくつかの調査を行いましたが、まだわかりません. 下の図は、私がやりたいことを説明しています。また、私は iOS から直接来ているので、自分の理論についてフィードバックが必要です。

ここに画像の説明を入力

ご覧のとおり、すべてのフラグメントは WebView フラグメントで構成されています。ユーザーがその WebView Fragment 内のリンクをクリックすると、リクエストがキャッチされ、新しい Fragment が置き換えられます。これは、WebView を再び保持し、前の Fragment でクリックされたリンクをロードします。ある時点で、ユーザーは最初の Fragment に戻ることを決定し、戻るボタンを押します。

Fragments は、最初のフラグメントが再び表示されるまで、逆の順序でスタックからポップ オフする必要があります。理想的には、各 Fragment はインスタンスの状態を保存する必要があります。これにより、ユーザーが戻ったときに WebView がサイトを再度読み込む必要がなくなります。

Fragments Tabsに関する例を提供するActionBar Sherlockに出くわしました。フラグメント スタックの例もあります。これら 2 つの例を組み合わせて、各タブがフラグメント スタックで構成されるようにするのが理想的です。

私のコード構造は次のようになります。

私の TabHost フラグメント

public class MyActivity extends SherlockFragmentActivity {
static TabHost mTabHost;
static TabManager mTabManager;

public static int THEME = R.style.Theme_Sherlock_Light;

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(THEME); //Used for theme switching in samples
    super.onCreate(savedInstanceState);

    setContentView(R.layout.fragment_tabs);
    mTabHost = (TabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup();
    mTabManager = new TabManager(this, mTabHost, R.id.myRealTabContent);

    // adding some Fragment Tabs
    mTabManager.addTab(mTabHost.newTabSpec(tabNames[i]).setIndicator(tabNames[i]),
                FragmentStackSupport.CountingFragment.class, bundle);


    if (savedInstanceState != null) {
        mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));
    }
}


@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("tab", mTabHost.getCurrentTabTag());
}



// defining the Tab Manager

各タブのフラグメント スタックはどのようになりますか? 現在、各タブ内に Fragment を持つ Fragment アクティビティがあります。しかし、私は必要なロジックを達成していません。

ここに私のコードがあります:内部に WebView を含む私のフラグメント

フィードバックやヒントをいただければ幸いです (または、ウェブ上に例はありますか?)。また、メモリについても懸念があります-ユーザーがクリックしてクリックしてクリックし、メモリがスタック内の各フラグメントを保持する必要がある場合。

乾杯。

4

1 に答える 1

2

ユーザーがリンクをクリックするたびに新しいフラグメントを作成する正当な理由はあまり思いつきません。そうしようとしている理由はありますか?新しいフラグメントを作成する代わりに、単に shouldOverrideUrlLoading() から false を返すと、WebView は新しいページをロードします。元に戻りたい場合は、canGoBack() メソッドと goBack() メソッドを使用できます。戻るボタンの押下を処理するには、アクティビティで onKeyDown をオーバーライドし、次のようにします。

    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack() {
        myWebView.goBack();
        return true;
    }
于 2012-10-22T19:59:13.203 に答える