2012-10-22 21 views
7

こんにちは私はそれぞれのタブのアクティビティグループを実装したいと思っているAndroidのアプリケーションに取り組んでいます。しかし、アクティビティグループは廃止予定であるため、私はフラグメントを使用する必要があります。私は最後の日をgoogledし、そのトピックに関するいくつかの研究を行ったが、私はまだそれを取得しません。以下の図は、私がしたいことを説明しています。また、私はiOSからまっすぐに来ており、私の理論についていくつかのフィードバックが必要です。Androidの断片と活動のグループ

enter image description here

あなたはすべての断片を見ることができるようにWebViewの断片で構成されています。ユーザーがそのWebView Fragmentのリンクをクリックすると、リクエストが捕捉され、新しいFragmentが置き換えられ、WebViewが再び保持され、前のFragmentでクリックされたリンクがロードされます。ある時点で、ユーザは第1のフラグメントに戻ることを決定し、戻るボタンを押す。

フラグメントは、最初のフラグメントが再び表示されるまで、逆の順序でスタックからポップアウトする必要があります。理想的には、各フラグメントはインスタンスを保存する必要があるため、ユーザーがWebViewに戻ったときにサイトを再度ロードする必要はありません。

私は、フラグメントタブについての例を提供する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 

どのように各タブのフラグメントスタックは次のようになりますでしょうか? 現在、私は各タブの中にフラグメントを持つフラグメントアクティビティを持っています。しかし、私は必要な論理を達成していません。

は、ここに私のコードです:(?またはWeb上の任意の例がある)

My Fragment with WebView insideは、私はいくつかのフィードバックやヒントのために喜んでいるだろう。私はまた、ユーザーがクリックしてクリックして、メモリがスタック内の各フラグメントを保持しなければならないとき、メモリに関するいくつかの懸念を持っています。

乾杯。

+5

+1よく説明されている質問です。 –

+0

この問題の解決方法を見つけたことはありますか? –

答えて

1

ユーザーがリンクをクリックするたびに新しいフラグメントを作成することは、多くの理由から考えられません。あなたがそれをやろうとしている理由はありますか?新しいフラグメントを作成するのではなく、単にshouldOverrideUrlLoading()からfalseを返すと、WebViewは新しいページをロードし、戻す場合はcanGoBack()およびgoBack()メソッドを使用できます。戻るボタンの押下を処理するには、アクティビティのonKeyDownを上書きして、次のような操作を行います。

if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack() { 
     myWebView.goBack(); 
     return true; 
    } 
+0

お返事ありがとうございます。私はそれが次善であることに同意するが、私は理由がある。私はあなたの助言に従うと思いますが、それははるかに簡単です。 しかし、私はどのように各タブのフラグメントスタックを実装するかに興味があります。 –

+0

あなたが尋ねてきたので、私はそれが素晴らしいアイデアではないと確信していますが、文字通り各タブのフラグメントのスタック(または他のデータ構造)を持つことができます。ユーザーがリンクをクリックするたびに、そのタブのスタックにフラグメントを追加します(明確な理由から、アプリケーションのバックスタックにフラグメントを追加したくない場合)。次に、戻るボタンを押して、現在表示されているタブのスタックが空でないかどうかを確認し、そうであれば正しいタブに表示されるように次のタブをポップします。 – ajpolt

+0

タブごとに別々のアクティビティがあり、各アクティビティに独自のフラグメントがある可能性がありますか? – tbkn23

関連する問題