Правильный способ навигации назад - веб-просмотр [дубликат]

  общедоступный класс VersionComparator {/ * цикл через обе строки версии *, а затем проведите внутреннюю строку к компьютеру значение val для int * для каждого целого числа read, do num * 10 + & lt; integer read & gt;  * и остановитесь, когда натыкаетесь на.  * Когда '.'  встречается ... * см. if '.'  встречается для обеих строк *, если он затем сравнивает num1 и num2 *, если num1 == num2 ... итерация по p1 ++, p2 ++ * else return (num1 & gt; num2)?  1: -1 * Если оба конца строки затем сравнивают (num1, num2), возвращают 0, 1, -1 * else, перебирают более длинную строку и * проверяют, имеют ли они только завершающие нули. * Если у нее есть только завершающие нули, тогда возвращаем 0  * else это больше, чем другая строка * / public static int compareVersions (String v1, String v2) {int num1 = 0;  int num2 = 0;  int p1 = 0;  int p2 = 0;  while (p1 & lt; v1.length () & amp; p2 & lt; v2.length ()) {num1 = Integer.parseInt (v1.charAt (p1) + "");  num2 = Integer.parseInt (v2.charAt (p2) + "");  p1 ++;  p2 ++;  (p1 & lt; v1.length () & amp; p2 & lt; v2.length () & amp; v1.charAt (p1)! = '.' & amp; v2.charAt (p2)! = '  . ') {if (p1 & lt; v1.length ()) num1 = num1 * 10 + Integer.parseInt (v1.charAt (p1) + "");  if (p2 & lt; v2.length ()) num2 = num2 * 10 + Integer.parseInt (v2.charAt (p2) + "");  p1 ++;  p2 ++;  } if (p1 & lt; v1.length () & amp; p2 & lt; v2.length () & amp; v1.charAt (p1) == '.' & amp; v2.charAt (p2) ==  '.') {if ((num1 ^ num2) == 0) {p1 ++;  p2 ++;  } else return (num1 & gt; num2)?  1: -1;  } else if (p1 & lt; v1.length () & amp; p2 & lt; v2.length () & amp; v1.charAt (p1) == '.') return -1;  else if (p1 & lt; v1.length () & amp; p2 & lt; v2.length () & amp; v2.charAt (p2) == '.') return 1;  } if (p1 == v1.length () & amp; p2 == v2.length ()) {if ((num1 ^ num2) == 0) return 0;  else return (num1 & gt; num2)?  1: -1;  } else if (p1 == v1.length ()) {if ((num1 ^ num2) == 0) {while (p2 & lt; v2.length ()) {if (v2.charAt (p2)! = '.  '& amp; v2.charAt (p2)! =' 0 ') return -1;  p2 ++;  } return 0;  } else return (num1 & gt; num2)?  1: -1;  } else {if ((num1 ^ num2) == 0) {while (p1 & lt; v1.length ()) {if (v1.charAt (p1)! = '.' & amp; v1.charAt (p1)  ! = '0') return 1;  p1 ++;  } return 0;  } else return (num1 & gt; num2)?  1: -1;  }} public static void main (String [] args) {System.out.println (compareVersions ("11.23", "11.21.1.0.0.1.0") ^ 1);  System.out.println (compareVersions ("11.21.1.0.0.1.0", "11.23") ^ -1);  System.out.println (compareVersions ("11.23", "11.23.0.0.0.1.0") ^ -1);  System.out.println (compareVersions ("11.2", "11.23") ^ -1);  System.out.println (compareVersions ("11.23", "11.21.1.0.0.1.0") ^ 1);  System.out.println (compareVersions ("1.21.1.0.0.1.0", "2.23") ^ -1);  System.out.println (compareVersions ("11.23", "11.21.1.0.0.1.0") ^ 1);  System.out.println (compareVersions ("11.23.0.0.0.0.0", "11.23") ^ 0);  System.out.println (compareVersions ("11.23", "11.21.1.0.0.1.0") ^ 1);  System.out.println (compareVersions ("1.5.1.3", "1.5.1.3.0") ^ 0);  System.out.println (compareVersions ("1.5.1.4", "1.5.1.3.0") ^ 1);  System.out.println (compareVersions ("1.2.1.3", "1.5.1.3.0") ^ -1);  System.out.println (compareVersions ("1.2.1.3", "1.22.1.3.0") ^ -1);  System.out.println (compareVersions ("1.222.1.3", "1.22.1.3.0") ^ 1);  }}  
256
задан Andrew T. 28 August 2014 в 04:28
поделиться

10 ответов

Я использую что-то подобное в своих действиях с помощью WebViews:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:
                if (mWebView.canGoBack()) {
                    mWebView.goBack();
                } else {
                    finish();
                }
                return true;
        }

    }
    return super.onKeyDown(keyCode, event);
}

Edit:

Чтобы этот код работал, вам нужно добавить поле в Activity содержащий WebView:

private WebView mWebView;

Инициализировать его в методе onCreate(), и вам должно быть хорошо идти.

mWebView = (WebView) findViewById(R.id.webView);
424
ответ дан friederbluemle 16 August 2018 в 08:04
поделиться
  • 1
    должен ли я разместить этот код? под всем моим кодом? или просто под loasUrl так же, как builtinZoom? – zvzej 20 May 2011 в 21:54
  • 2
    Вы поместили бы его в свою деятельность, но вне метода onCreate (). – FoamyGuy 20 May 2011 в 22:06
  • 3
    когда я помещаю ваш код, он дает мне ошибку для переменной mWebView, так как вне ее oncreate, где я должен поместить эту переменную? – zvzej 20 May 2011 в 22:12
  • 4
    вместо finish() положите return super.onKeyDown(keyCode, event) – Bostone 16 January 2013 в 21:13
  • 5
    или просто просто удалите весь блок else – Bostone 16 January 2013 в 21:23

Вы должны использовать следующие библиотеки в своем классе: onBackKeyPressed. canGoBack () проверяет, может ли веб-просмотр ссылаться на предыдущую страницу. Если это возможно, используйте функцию goBack () для ссылки на предыдущую страницу (вернитесь назад).

 @Override
        public void onBackPressed() {
          if( mWebview.canGoBack()){
               mWebview.goBack(); 
           }else{
            //Do something else. like trigger pop up. Add rate app or see more app
           }
  }
1
ответ дан Daniel Nyamasyo 16 August 2018 в 08:04
поделиться

Почему бы не использовать onBackPressed()?

@Override
public void onBackPressed()
{
    // super.onBackPressed(); Do not call me!

    // Go to the previous web page.
}
13
ответ дан Gary Buyn 16 August 2018 в 08:04
поделиться
  • 1
    потому что только sdk 2.2 и выше поддерживает этот метод .. он не работает с sdk 1.6 – Maher Abuthraa 25 January 2012 в 12:46
  • 2
    otoh, Honeycomb и новее не имеют вспомогательного ключа оборудования, в результате чего onKeyDown никогда не вызывается. – junkdog 9 May 2012 в 04:57

Веб-просмотр в действии, Ниже код работал для меня, Завершить действие после загрузки Url в webview.in onbackpressed он переходит к предыдущему действию

 webView = (WebView) findViewById(R.id.info_webView);
 webView.loadUrl(value);
 finish();
-3
ответ дан Ichigo Kurosaki 16 August 2018 в 08:04
поделиться

Если вы используете Android 2.2 и выше (сейчас это большинство устройств), следующий код даст вам то, что вы хотите.

@Override
public void onBackPressed() {
    if (webView.canGoBack()) {
        webView.goBack();
    } else {
        super.onBackPressed();
    }
}
244
ответ дан Ion Aalbers 16 August 2018 в 08:04
поделиться
  • 1
    Ницца. Я использую вариант ответа, но без "else" блок. В противном случае, когда пользователь нажимает слишком много раз, они заканчивают на пустое приложение «начало», экран, без возможности перехода пользователя вперед. – George Armhold 12 November 2012 в 18:49
  • 2
    Это выглядит как наиболее подходящий ответ. @CaffeineComa, вы, вероятно, могли бы просто закодировать экран запуска приложения, чтобы не отображаться в приложении & quot; активность & quot; история. Просто добавьте атрибут android:noHistory="true" в <activity>, который вы хотите, в AndroidManifest.xml – LocalPCGuy 27 September 2013 в 22:48
  • 3
    Теперь это лучший ответ. – Wédney Yuri 29 July 2015 в 12:36
  • 4
    Теперь это лучший ответ – shridutt kothari 7 April 2017 в 04:45
  • 5
    Должно ли это return;? Это делается в учебном руководстве . – Keith 25 April 2017 в 05:29

Фокусировка также должна быть проверена в onBackPressed

    @Override
    public void onBackPressed() {
        if (mWebview.isFocused() && mWebview.canGoBack()) {
            mWebview.goBack();       
        } else {
            super.onBackPressed();
            finish();
        }
    }
13
ответ дан Jared Burrows 16 August 2018 в 08:04
поделиться
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // Check if the key event was the Back button and if there's history
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
        myWebView.goBack();
        return true;
    }
    // If it wasn't the Back key or there's no web page history, bubble up to the default
    // system behavior (probably exit the activity)
    return super.onKeyDown(keyCode, event);
}
6
ответ дан Mahesh 16 August 2018 в 08:04
поделиться

здесь код с подтверждением выхода:

@Override
    public void onBackPressed()
    {
        if(webView.canGoBack()){
            webView.goBack();
        }else{
            new AlertDialog.Builder(this)
            .setIcon(android.R.drawable.ic_dialog_alert)
            .setTitle("Exit!")
            .setMessage("Are you sure you want to close?")
            .setPositiveButton("Yes", new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();    
                }

            })
            .setNegativeButton("No", null)
            .show();    
        }   
    }
8
ответ дан Mohammed Ahmed 16 August 2018 в 08:04
поделиться

Если вы хотите перейти на обратную страницу при нажатии на кнопку возврата телефона, используйте это:

@Override
public void onBackPressed() {
    if (webView.canGoBack()) {
        webView.goBack();
    } else {
        super.onBackPressed();
    }
} 

Вы также можете создать пользовательскую кнопку возврата следующим образом:

btnback.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            if (wv.canGoBack()) {
                wv.goBack();
            }
        }
    }); 

Полная ссылка для следующей кнопки и индикатора выполнения: положить назад и следующую кнопку в webview

11
ответ дан Parsania Hardik 16 August 2018 в 08:04
поделиться

Это мое решение. Он также работает во Фрагменте.

webView.setOnKeyListener(new OnKeyListener()
{
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event)
    {
        if(event.getAction() == KeyEvent.ACTION_DOWN)
        {
            WebView webView = (WebView) v;

            switch(keyCode)
            {
                case KeyEvent.KEYCODE_BACK:
                    if(webView.canGoBack())
                    {
                        webView.goBack();
                        return true;
                    }
                    break;
            }
        }

        return false;
    }
});
85
ответ дан petrnohejl 16 August 2018 в 08:04
поделиться
  • 1
    это мое мнение, это должен быть правильный ответ. – Arvin 16 July 2013 в 03:23
  • 2
    Почему этот ответ должен быть правильным ответом? Любая проблема с двумя верхними ответами? – ca9163d9 9 January 2015 в 05:12
  • 3
    @ dc7a9163d9, действие может хотеть иметь несколько видов или объектов, которые зависят от keyDown. этот ответ абстрагирует необходимость активности для зависания зависимостей через webview (это лучший дизайн). Кроме того, новые приложения почти исключительно используют фрагменты, а не действия, и этот ответ поддерживает этот случай, а не другие – David T. 21 July 2015 в 04:02
  • 4
    работает как шарм :) – Aishwat Singh 8 December 2015 в 16:08
  • 5
    Работает хорошо..... – Prashant 1 June 2017 в 09:28
Другие вопросы по тегам:

Похожие вопросы: