Android碎片与活动组

7

我正在开发一款Android应用程序,希望为每个选项卡实现一个Activity Group。但由于Activity Group已被弃用,因此必须使用Fragments。我在过去的几天里进行了搜索和研究,但仍然不理解。下面的图形描述了我想要做的事情。另外,我刚从iOS转过来,需要一些关于我的理论的反馈。

enter image description here

正如您所看到的,每个片段都由一个WebView片段组成。当用户在该WebView片段中单击链接时,请求被捕获并替换为一个新的片段,该片段再次持有一个WebView并加载在前一个片段中单击的链接。在某一点上,用户决定返回第一个片段并按下返回按钮。
片段应该以相反的顺序弹出堆栈,直到再次看到第一个片段。理想情况下,每个片段都应该保存它的instancestate,这样当用户返回时,WebView不需要再次加载网站。
我遇到了ActionBar Sherlock,它提供了关于Fragments Tabs的示例。还有一个Fragment Stack的示例。将这两个示例结合起来,每个选项卡都包含一个Fragment Stack将是理想的。
我的代码结构如下:
我的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

每个选项卡的片段堆栈应该是什么样子? 目前,我有一个片段活动,每个选项卡内都有一个片段。但我没有实现我需要的逻辑。
这是我的代码:我的带有WebView的片段 我很高兴能得到一些反馈和提示(或者网上有任何示例吗?)。我也担心内存——当用户点击并不断点击时,内存必须保持每个片段在堆栈中。
干杯。

5
对于这个问题进行良好解释,我给出+1的评价。 - A Random Android Dev
你有找到解决这个问题的可靠方案吗? - fury-s12
1个回答

2

我想不出来为什么每次用户点击链接都要创建一个新的片段的好处。您为什么要这样做呢?如果您只是从shouldOverrideUrlLoading()中返回false而不是创建一个新的片段,则WebView将加载新页面,如果您想返回,则可以使用canGoBack()和goBack()方法。要处理后退按钮按下事件,您可以在活动中覆盖onKeyDown,并执行以下操作:

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

谢谢您的回复。我同意这不是最佳选择,但我有我的理由。虽然我认为我会遵循您的建议 - 这更容易。尽管如此,我还是对如何为每个选项卡实现片段堆栈感兴趣。 - Bins Ich
好的,既然你问了,我确定这不是一个好主意,但你可以为每个选项卡创建一个片段(或其他数据结构)的堆栈。每次用户点击链接时,将该片段添加到该选项卡的堆栈中(出于明显的原因,您不希望将任何片段添加到应用程序的后退堆栈中)。然后,捕获后退按钮按下事件,并查看当前显示的选项卡的堆栈是否非空,如果是,则弹出下一个要在正确选项卡中显示的片段。 - ajpolt
也许可以为每个选项卡设置单独的活动,然后每个活动都有自己的片段? - tbkn23

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接