Замораживание или создание стабильного веб-представления Когда я выбираю панель действий Назад? Предотвращение загрузки/перезагрузки каждый раз

Я хочу предотвратить перезагрузку страницы или заморозить текущий веб-просмотр Когда я выбираю любое меню из меню параметров

Это мой веб-просмотр

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

}

I Мой веб-просмотр У меня есть некоторые меню Итак, когда я нажимаю на любое меню, например "Настройка" или "О нем"... Он показывает, но после этого, когда я возвращаюсь в "Дом" с помощью кнопки "Option" или "Назад" из панели действий или в меню параметров Перезагрузка

Итак, мне нужно войти в систему и проверить на предыдущей странице ее трудную для каждого раза.. Может ли кто-нибудь предложить мне, как заморозить веб-представление или Как предотвратить перезагрузку с помощью того же меню приложений...

Обновление

Это мой класс Us

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

}

так, например, если это панель действий назад введите описание изображения здесь

поэтому, когда я нажимаю на стрелку, он перезагружает веб-просмотр. На устройстве Аппаратное обеспечение назад я отключил... на аппаратном обеспечении его отлично, но... На панели действий верните перезагрузку

Ответ 1

Я только что выполнил тест, используя два действия: MainActivity, содержащий webView, как и ваш, и кнопку меню, которая открывает второе действие (About.java), используя то же самое намерение, которое вы использовали в onOptionsItemSelected().

После того, как вы открыли из меню пункт "Активность", если я нажму кнопку возврата к аппаратной части телефона, она вернется в MainActivity, не перезагружая содержимое WebView, поэтому работает так, как вы ожидаете.

Я думаю, что проблема, с которой вы столкнулись, - это код, который вы используете для возврата к основной деятельности. Вы можете использовать намерение снова открыть свое основное действие из своих вторичных действий, в результате чего будет создан новый экземпляр вашего основного вида, запускающий onCreate() и, таким образом, повторное создание WebView и перезагрузку страницы.

Чтобы проверить, если это так, вы можете добавить некоторые операторы отладки внутри onCreate(), используя Log.d() или System.out.println(), чтобы проверьте, вызвана ли она, когда вы пытаетесь вернуться к своей основной деятельности (MyWebV). Если вы видите свои отладочные сообщения в журналах, это значит, что вы не вернетесь в свою основную деятельность правильно.

Как вы должны закрыть свои вторичные действия, чтобы вернуться к основному виду деятельности, вызывается:

finish()

Этот метод закроет текущую активность и восстановит предыдущую активность в стеке (ваша активность MyWebV в этом случае), не создавая ее повторно, просто вызывая onStart() и onResume(), которая не воссоздала бы вашу WebView или перезагрузите страницу.

Ответ 2

О нас или Настройка кода страницы, где вы использовали свое пользовательское событие назад или аппаратное обратное событие. Я думаю, что вы снова создаете активность в своем заднем событии, которое не требует, чтобы вам просто нужно было позвонить методу завершения своих настроек или О нас страница там, и страница 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); 
  }