Wha*_* On 14 android reload webview
当我从选项菜单中选择任何菜单时,我想要阻止页面重新加载或冻结当前Web视图
这是我的Webview
public class MyWebV extends AppCompatActivity {
private WebView webView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mwview);
Toolbar toolbar = (Toolbar) findViewById(R.id.tb1);
setSupportActionBar(toolbar);
webView = (WebView) findViewById(R.id.web5);
WebSettings set = webView.getSettings();
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());
set.setJavaScriptEnabled(true);
set.setJavaScriptCanOpenWindowsAutomatically(true);
set.setLoadWithOverviewMode(true);
set.setUseWideViewPort(true);
set.setDomStorageEnabled(true);
set.setAllowUniversalAccessFromFileURLs(true);
set.setJavaScriptCanOpenWindowsAutomatically(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
final ProgressDialog progressBar = ProgressDialog.show(MyWebV.this, "Please Wait", "Loading...");
webView.requestFocusFromTouch();
webView.setWebViewClient(new WebViewClient()
{
public void onLoadResource (WebView view, String url) {
if (progressBar == null) {
progressBar.setTitle("Please Wait !");
progressBar.setMessage("Loading...");
progressBar.show();
}
}
public void onPageFinished(WebView view, String url) {
try{
if (progressBar.isShowing()) {
progressBar.dismiss();
}
}catch(Exception exception){
exception.printStackTrace();
}
}
});
webView.setWebChromeClient(new WebChromeClient() {
String url = "www.example.com/login.php";
webView.loadUrl(url);
}
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
webView.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
webView.restoreState(savedInstanceState);
}
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.m_MyWebV, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.about1) {
Intent aboutIntent = new Intent(this, About.class);
startActivity(aboutIntent);
return true;
}
else if (id == R.id.set1) {
Intent webIntent = new Intent(this, Settings.class);
startActivity(webIntent);
return true;
}
return super.onOptionsItemSelected(item);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的网页视图我有一些菜单所以当我点击任何菜单,如设置或关于...它显示但之后当我回到主页时带有选项或后退箭头从操作栏或选项菜单重新加载
所以我需要登录并且每次都检查上一页的难度.任何人都可以建议我如何冻结网页视图或如何防止使用相同的应用程序菜单重新加载...
更新
这是关于我们的课程
public class About extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aboutus);
Toolbar toolbar = (Toolbar) findViewById(R.id.tb3);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.m_about, menu);
/*something*/
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.home) {
Intent mypIntent = new Intent(this, MyWebV.class);
About.this.finish();
startActivity(mypIntent);
return true;
}
else if (id == R.id.about1) {
Intent aboutIntent = new Intent(this, About.class);
About.this.finish();
startActivity(aboutIntent);
return true;
}
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
}
所以,当我点击箭头它重新加载webview ..在设备硬件上我已经禁用...在硬件上回来它很好但是...在行动栏上它的重新加载
我刚刚使用两个活动执行了测试,一个包含像您一样的 webView 的 MainActivity,以及一个打开第二个活动 (About.java) 的菜单按钮,使用与 onOptionsItemSelected() 中使用的完全相同的意图。
从菜单中打开“关于活动”后,如果我按手机的硬件后退按钮,它将返回到 MainActivity,而不重新加载 WebView 的内容,因此它可以按您的预期工作。
我认为您遇到的问题是您用来返回主要活动的代码。您可能正在使用 Intent 从次要活动中再次打开主要活动,导致创建主要活动的新实例,触发 onCreate(),从而重新创建 WebView 并重新加载页面。
要测试是否是这种情况,您可以使用Log.d()或System.out.println()在 onCreate() 内添加一些调试语句,以检查当您尝试返回主活动 (MyWebV) 时是否正在调用它。如果您在日志中看到调试消息,那是因为您没有正确返回到主活动。
您应该关闭次要活动以返回主要活动的方法是调用:
finish()
Run Code Online (Sandbox Code Playgroud)
该方法将关闭当前活动并恢复堆栈中的前一个活动(在本例中为您的 MyWebV 活动),无需重新创建它,只需调用 onStart() 和 onResume(),这不会重新创建您的 WebView 或重新加载这一页。
| 归档时间: |
|
| 查看次数: |
652 次 |
| 最近记录: |