当我选择操作栏时,冻结或建立稳定的Web视图?每次阻止加载/重新加载

时间:2017-04-07 07:31:12

标签: android webview reload

当我从选项菜单中选择任何菜单时,我想阻止页面重新加载或冻结当前的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);
    }
}

}

我的网络视图我有一些菜单所以当我点击任何菜单如设置或关于...它正在显示但之后当我从操作栏或选项菜单返回主页时带有选项或后退箭头重新加载

所以我需要登录并且每次都检查上一页的难度。任何人都可以建议我如何冻结网页视图或如何防止使用相同的应用程序菜单重新加载...

更新

这是关于我们的课程

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);
}

}

所以例如,如果这是行动栏enter image description here

所以当我点击箭头它重新加载webview ..在设备硬件上我已经禁用...在硬件上回来它很好但是...在操作栏上它的重新加载

2 个答案:

答案 0 :(得分:2)

我刚刚使用两个活动执行了测试,一个包含webView的MainActivity和一个类似于你的webView,以及一个打开第二个活动(About.java)的菜单按钮,使用与onOptionsItemSelected()中使用的完全相同的意图。

从菜单打开关于活动后,如果我按下手机的硬件后退按钮,它将返回MainActivity而不重新加载WebView的内容,因此它可以按预期工作

我认为您遇到的问题是您使用的代码返回主要活动。您可能正在使用Intent从辅助活动中再次打开主活动,从而导致创建主活动的新实例,触发onCreate(),从而重新创建WebView并重新加载页面。

要测试是否是这种情况,您可以使用 Log.d() System.out.println()强制中添加一些调试语句。 strong>,检查当您尝试返回主活动(MyWebV)时是否被调用。如果您在日志中看到调试消息,那是因为您没有正确地返回主要活动

您应该关闭辅助活动以返回主要活动的方式是:

finish()

该方法将关闭当前活动并恢复堆栈中的上一个活动(在这种情况下是您的MyWebV活动),而不是重新创建它,只需调用onStart()和onResume(),它们不会重新启动创建WebView或重新加载页面。

答案 1 :(得分:0)

关于我们或设置您使用自定义后退活动或硬件返回活动的页面代码。我认为您在后台活动中再次创建活动,这并不需要您只需要调用完成方法您的设置或关于我们页面完成那里和Webview页面保持原样。这就是为什么我要求你发布你的一个页面的代码至少我可以理解你做了什么。

 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) {
            finish();
            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);
    }

    }

@Override public boolean onOptionsItemSelected(MenuItem item) 
{ int id = item.getItemId(); 
   if (id == android.R.id.home) { 
                                  finish(); 
                                 return true; 
            } 
        return super.onOptionsItemSelected(item); 
  }