Android fragment 与 Activity 组

标签 android android-fragments android-tabhost activitygroup

我正在开发一个 Android 应用程序,我想在其中为每个选项卡实现一个 Activity 组。但是由于不推荐使用 Activity Group,我必须使用 Fragments。我在过去几天用谷歌搜索并对该主题进行了一些研究,但我仍然不明白。下图描述了我想要做什么。另外,我是直接从 iOS 过来的,我需要一些关于我的理论的反馈。

enter image description here

如您所见,每个 fragment 都包含一个 WebView fragment 。当用户单击该 WebView fragment 中的链接时 - 请求被捕获并替换一个新 fragment ,该 fragment 再次包含 WebView 并加载在前一个 fragment 中单击的链接。在某一时刻,用户决定返回到第一个 fragment 并按下后退按钮。

fragment 应该以相反的顺序从堆栈中弹出,直到他再次看到第一个 fragment 。理想情况下,每个 Fragment 都应该保存他的实例状态,这样当用户返回时,WebView 就不需要再次加载站点。

我遇到过 ActionBar Sherlock,它提供了一个关于 fragment 选项卡的示例。还有一个 fragment 堆栈示例。最好结合这两个示例,以便每个选项卡都包含一个 Fragment Stack。

我的代码结构如下所示:

我的 TabHost fragment

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 Stack 应该是什么样子的? 目前我有一个 fragment Activity ,每个选项卡内都有一个 fragment 。但是我没有实现我需要的逻辑。

这是我的代码:My Fragment with WebView inside

我很乐意提供一些反馈和提示(或者网络上是否有任何示例?)。我也对内存有一些担忧——当用户点击、点击、点击时,内存必须保存堆栈中的每个 Fragment。

干杯。

最佳答案

我想不出有多少好的理由在用户每次单击链接时创建一个新 fragment 。你这样做有什么理由吗?如果您只是从 shouldOverrideUrlLoading() 返回 false 而不是创建新 fragment ,WebView 将加载新页面,如果您想返回,可以使用 canGoBack() 和 goBack() 方法。要处理后退按钮按下,您可以在 Activity 中覆盖 onKeyDown,并执行如下操作:

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

关于Android fragment 与 Activity 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13017009/

相关文章:

android - webview android 的按钮

java - Android 共享首选项 - 类的数组列表

java - Libgdx - 纹理未显示在屏幕更改上

android - Gradle 错误 : No value has been specified for property 'buildConfigPackageName'

Android - 使用 NDK 的 Gradle 构建

java - 从 Activity 访问 ViewPager Fragment 方法

android - 无法解析 R.id。安卓。

android - 获取 java.lang.IllegalStateException : No activity when resuming an activity

android - Fragments 和 EventBus 的空指针异常

android - 如何在 Android 应用程序中创建标签并动态添加标签(取决于匹配的用户)