Как перейти на предыдущую страницу в Webview, представленном во фрагменте? - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть действие под названием SearchActivity. Имеет панель поиска и 4 вкладки с веб-представлениями. Когда я ввожу текст и нажимаю на поиск, все вкладки загружают соответствующие URL-адреса, которые я им передаю. Но когда я нажимаю кнопку «Назад», я хочу, чтобы все веб-просмотры вернулись на предыдущую страницу, вместо этого действие закрывается. Я попробовал приведенный ниже код, но он не работает. Это код SearchActivity

public boolean onKeyDown(int keyCode, KeyEvent event) {

    int count = getFragmentManager().getBackStackEntryCount();

    if (count != 0 && (keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
        webView.goBack();
        getFragmentManager().popBackStack();
        //additional code
    } else {
        super.onBackPressed();
    }
    return super.onKeyDown(keyCode, event);
}

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Я бы использовал интерфейс:

Public Interface InterfaceBackPressed {
    onInterfaceBackPressed();
}

Тогда в вашей Деятельности:

public class SearchActivity extends Activity {
...
    @Override public void onBackPressed() {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container);
       if (!(fragment instanceof InterfaceBackPressed) || !((InterfaceBackPressed) fragment).onBackPressed()) {
          super.onInterfaceBackPressed();
       }
    } 
}

и каждый фрагмент реализует ваш интерфейс:

public class MyFragment extends Fragment implements IOnBackPressed{
   @Override
   public void onInterfaceBackPressed() {
       if (webView.canGoBack()) {

            webView.goBack(); 
        } else {
        super.onInterfaceBackPressed();
        }
    }
}
0 голосов
/ 17 ноября 2018

1.Добавьте интерфейс на SearchActivity и внедрите этот интерфейс на MyFragment для связи между SearchActivity и MyFragment.

2. Переопределить onBackPressed() метод SearchActivity для добавления пользовательских функций при нажатии кнопки «Назад» и проверки возможности возврата фрагмента WebView через прослушиватель goBack. Если можете вернуться, то сделайте это. Если не можете, позвоните super.onBackPressed().

SearchActivity.java

public class SearchActivity extends AppCompatActivity{

public interface goBack{
    boolean canGoBack();
}

@Override
public void onBackPressed() {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
   //fragment_container is a layout where fragment is populated

    if (fragment instanceof goBack && fragment.canGoBack()) {
        return;
    }
    super.onBackPressed();

}
}

MyFragment.java

public class MyFragment extends Fragment implements SearchActivity.goBack{
@Override
public boolean canGoBack() {
    if (webView.canGoBack()) {

        webView.goBack();
        return true;
    }
    return false;
}
...