2015-08-10 4 views
0

Я заканчиваю свое приложение WebViev, но у меня проблема с возвратом на страницу с помощью WebView при нажатии кнопки «Назад» приложение закрывается. Мне нужно вернуться к предыдущей странице в WebView, но я получаю «не могу разрешить mehtod onBackPressed()»; ошибка.Метод «onBackPressed» не работает с фрагментом WebView

фрагмент кода:

package com.lfcchile; 


import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.webkit.WebView; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class MyFragment4 extends Fragment { 
private WebView webView; 
public MyFragment4() { 
    // Required empty public constructor 
} 


@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 



@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View mainView = (View) inflater.inflate(R.layout.fragment_my_fragment1, container, false); 
    //webView.getSettings().setBuiltInZoomControls(true); 
    //webView.setInitialScale(50); 
    //webView.getSettings().setPluginsEnabled(true); 
    WebView webView = (WebView)mainView.findViewById(R.id.webview); 
    webView.setWebViewClient(new MantenerDominioWeb()); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setBuiltInZoomControls(false); 
    webView.getSettings().setSupportZoom(false); 
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
    webView.getSettings().setAllowFileAccess(true); 
    webView.getSettings().setDomStorageEnabled(true); 
    webView.canGoBack(); 
    webView.goBack(); 
    webView.loadUrl("http://www.lfcchile.com/sitios-interes/"); 
    return mainView; 
} 

@Override 

public View onBackPressed() { 
    if(webView.canGoBack()) { 
     webView.goBack(); 
    } 

    else { 
     super.onBackPressed(); 
    } 
} 


@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
} 


@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 


@Override 
public void onDetach() { 
    super.onDetach(); 
} 

} 

Когда я поставил onBackPressed на MainActivity и нажмите кнопку назад, приложение падает ... любые идеи, пожалуйста?

+0

Приложить аварийные журналы. –

+0

Почему вы использовали super.onBackPressesd в другом состоянии ... Вы должны удалить условие else и сделать код super.onBackPressed без каких-либо условий –

ответ

2

Фрагменты не подпираются. Вы должны использовать backPressed своей активности контейнера. В вашей активности переопределите onBackPressed & вызовите его из фрагмента, используя getActivity.onBackPressed().

3

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

mainView.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (event.getAction() == android.view.KeyEvent.ACTION_DOWN) { 
      if ((keyCode == android.view.KeyEvent.KEYCODE_BACK)) { 
       if(webView!=null) 
       { 
        if(webView.canGoBack()) 
        { 
        webView.goBack(); 
        } 
       } 
      } 
     } 
     return true; 
    } 
}); 

Чтобы получить прикоснулся ключевое событие, вы должны переопределить onkeylistener ...

+0

Это сработало для меня на веб-просмотре, похоже, borken Kitkat v30, который не будет прежде чем использовать заднее нажатие. Один комментарий/улучшение: onKey должен возвращать true, только если событие было уничтожено, в противном случае - false. – bk138

1

Override onKeyDown вместо onBackPressed. Не обязательно . Но это работает для меня

public boolean onKeyDown(int keyCode, KeyEvent event) { 

    switch (keyCode) { 
     case KeyEvent.KEYCODE_BACK: 

      // back button is pressed.. Do your stuff here 
      if(webView!=null) 
      { 
       if(webView.canGoBack()) 
       { 
       webView.goBack(); 
       } 
      } 

      return true; 
} 
     return false; 
} 
+1

logcat показывает это с помощью вашего кода: 08-10 19: 45: 50.236 18458-18458/com.lfcchile W/UnimplementedWebViewApi: не реализованный метод WebView onKeyDown, вызываемый из: android.webkit.WebView.onKeyDown (WebView.java:2211) –

Смежные вопросы