单例片段或保存网页视图状态
Posted
技术标签:
【中文标题】单例片段或保存网页视图状态【英文标题】:Singleton Fragment or save web view state 【发布时间】:2019-04-10 20:20:45 【问题描述】:我想要的是我在 Activity 中有一个片段,它有一个 web 视图,基本上是与客户服务聊天。此活动将从另一个活动中的按钮开始,
现在棘手的部分是我想保存 Web 视图的当前会话,以便无论何时用户来到此活动或每当我使用此片段时,我都可以显示最后一次对话。
所以我尝试的是
private class MyWebViewClient extends WebViewClient
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
// Saving the last loaded url in shared pref and then loading the same url in oncreateview
return true;
但是当用户进行对话时,它不会加载不同的 url,因此从不调用 shouldOverrideUrlLoading。
我们将非常感谢您的帮助
【问题讨论】:
【参考方案1】:试试这个代码的 sn-p -
public class Tab2Fragment extends Fragment
private WebView webView;
private Bundle webViewBundle;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.tab2,
container, false);
webView = (WebView) ll.findViewById(R.id.webView1);
webView.setWebViewClient(new WebViewClient());
if (webViewBundle == null)
webView.loadUrl("http://www.lucazanini.eu");
else
webView.restoreState(webViewBundle);
return ll;
@Override
public void onPause()
super.onPause();
webViewBundle = new Bundle();
webView.saveState(webViewBundle);
或者尝试使用这种方式-
如果网站正在启动会话,那么您可以使用this 获取会话和save it to Shared Preferences。否则,您可以keep track of page changes,并使用 SharedPreferences 保存/检索最新页面。
【讨论】:
我已经尝试了上面的示例,但它不起作用:(对于您提到的保存 cookie 和跟踪页面更改的其他选项,我没有收到页面更改的任何回调,因为没有更改在 url 中或者它没有打开一个新的 url 它只是一个聊天屏幕,用户正在与客户服务聊天。 codexpedia.com/android/…查看此网址希望对您有所帮助。 它正在使用 java 脚本调用一些函数,我需要的是一种方法来保存这个片段/Web 视图状态,并且每当这个片段从保存状态而不是从一开始就显示这个片段/Web 视图时就像一个单例类 你可以在你的 url 中保留一些参数来保存状态。【参考方案2】:正如 Al-Amin 所说,我可以在我的 URL 中保存一些密钥,但我没有后端团队对这个项目的支持,因为这个模块在许多其他地方使用,所以他们无法改变任何东西,所以我解决了这个问题将我的活动的启动模式用作单个实例
android:launchMode="singleInstance"
对于后按
moveTaskToBack(true);
因此,在我调用完成活动之前,我的 webview 活动不会被破坏。
【讨论】:
以上是关于单例片段或保存网页视图状态的主要内容,如果未能解决你的问题,请参考以下文章
android片段-当另一个片段被推到它上面时如何保存片段中的视图状态