我正在开发一个 Android 应用程序,我想在其中为每个选项卡实现一个 Activity 组。但是由于不推荐使用 Activity Group,我必须使用 Fragments。我在过去几天用谷歌搜索并对该主题进行了一些研究,但我仍然不明白。下图描述了我想要做什么。另外,我是直接从 iOS 过来的,我需要一些关于我的理论的反馈。
如您所见,每个 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/
目录1.首先,需要一个副屏1.1可以通过代码的形式自己创建VirtualDispaly,创建副屏。1.2或者,在手机的开发者模式中直接开启模拟副屏,也是可以的。2.0怎么利用这个副屏幕?2.1 用作presentation演示ppt:2.2克隆主屏幕的内容,就是主屏幕显示什么,副屏显示同样的内容,镜像模式。2.3 将一个activity从第二个屏幕上启动,作为一个独立的屏幕首先说明一下这个多屏幕的概念,这里不是指分屏显示。分屏显示:是一个屏幕分出多个窗口,分别显示不同app.多屏支持:是一个设备有多个屏幕,怎么让不同的屏幕显示不同的app,或者是一个app同时用两个屏幕来显示不同的页面内容。多
适用于Go的AWSSDK版本?v2.0.0-preview.3Go的版本(goversion)?go1.9.3darwin/amd64您看到了什么问题?我正在为Go中的StepFunctions编写一个ActivityWorker。时间:事件worker正在运行,然后,我们从SFN控制台开始执行工作流一切似乎都运行良好。但是,当:事件worker停止,然后,我们从SFN控制台开始执行工作流,然后worker重新启动,工作人员似乎在轮询SFN,但它不执行在其停止期间启动的任务。如果我们在此时开始新的工作流执行(当worker正在运行时),则worker会成功执行新任务。工作人员停止期间执
我对PostgreSQL和golang都很陌生。主要是,我试图了解以下内容:为什么我需要Commit语句来关闭连接和另外两个Close电话没用?也非常感谢有关我使用游标的正确/错误方式的指示。在下面的函数中,我使用了gorp要创建一个CURSOR,请逐行查询我的Postgres数据库并将每一行写入编写器函数:func(txn*gorp.Transaction,qstring,params[]interface{},myWriterfunc([]byte,error)){cursor:="DECLAREGRABDATANOSCROLLCURSORFOR"+q_,err:=txn.Exec
我的XML文件的TextView权重属性有问题。我在没有ScrollView的情况下添加了Weight属性,当时它可以正常工作,但是当我添加ScrollView时它无法正常工作。解决方案可接受谢谢 最佳答案 实际上是scrollView没有达到全高,为此你应该添加android:fillViewport="true"在你的ScrollView中。你可以在这里查看我的答案AndroidTableLayoutinsideScrollView然后试试这个xml,我已经在我的机器上检查过了:--
我正在按照android教程制作应用程序,并且正在访问此页面:http://developer.android.com/training/basics/firstapp/building-ui.html我已按照所有说明进行操作,但我的“activity_my.xml”文件显示如下:虽然教程显示代码应该是这样的(或其中的一部分,但我不是100%确定):我似乎无法在我的“activity_my.xml”文件中找到上述代码。谁能告诉我我做错了什么,或者我是否错过了一步?编辑:环顾教程所说的代码应该在“activity_my.xml”中,而不是在“content_my.xml”文件中。这样对吗
我在AndroidStudio中创建了一个滚动Activity,并从Activity中删除了设置FAB操作的代码,但Activityxml中没有匹配的属性:我在Google上找到的所有内容都说要删除FABXML属性并阻止它显示,但这似乎已经过时,因为它不存在。我在哪里可以删除它?谢谢。 最佳答案 当您生成滚动Activity时,它将生成2个名为activity_scrolling.xml和content_scrolling.xml的xml文件。只需从activity_scrolling.xml文件中删除FABblock。删除这个bl
我想在我的一个Activity(显示新闻文章)中添加一个按钮,这样当用户单击该按钮时,文章就会在他们的浏览器中打开。到目前为止,我已经在我的xml中添加了按钮并且它出现了。我只是在使用点击监听器时遇到了一些麻烦。下面是我的代码,我收到“setOnClickListener”错误,这是“无法从静态内容引用非静态方法‘setOnClickListener(android.view.View.onClickListener)’”。我不知道这是什么意思!也许我没有在正确的地方调用方法,或者方法本身有错误?谁能帮我看看,谢谢!importandroid.content.Intent;import
当我点击fragment中的线性布局时,它不会给出任何错误,但不会开始新的Activity。我的代码有什么错误吗?请有人帮助我。我的项目的这个fragmentxml文件代码。Fragment_one.xml我的项目的这段java类代码。FragmentOne.javainfo.androidhive.listviewfeed;importandroid.app.Fragment;importandroid.content.Intent;importandroid.os.Build;importandroid.os.Bundle;importandroid.view.LayoutInfl
我创建了一个新Activity,由于某种原因,当它被使用时,它在状态栏中使用不同的颜色。奇怪的是,在“设计”预览中它呈现了正确的颜色。下面是两个屏幕截图,较深的颜色是正确的颜色。不正确正确主题与其他.xml布局相同,因此我很难确定此错误的来源。下面是布局代码:activity_menu.xml我不确定包含哪些其他代码对诊断此问题有用。编辑:样式.xml@style/DrawerArrowStyle@color/colorPrimary@color/colorPrimaryDark@color/colorAccentfalsetrue@color/colorPrimaryDark@col
我使用GoogleMapsAndroidv1API创建了我的应用程序的第一个版本。但是现在当我发布第二个版本的应用程序时,谷歌地图停止工作。我认为这是因为它已被弃用。所以现在我正在尝试创建示例Android应用程序以使用链接使用Googlemaphttps://developers.google.com/maps/documentation/android/start#getting_the_google_maps_android_api_v2但是我遇到了强制关闭错误FATALEXCEPTION:mainjava.lang.RuntimeException:Unabletostarta