Необходимо сделать, чтобы при нажатии кнопки Back на телефоне приложение не закрывалось. Нашел код на форуме, вроде бы расставил все куда нужно, но программа также закрывается при нажатии кнопки Back.
package com.example.app1;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import com.onesignal.OneSignal;
import java.util.Objects;
public class MainActivity extends AppCompatActivity {
WebView webView;
@SuppressLint("WrongConstant")
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Objects.requireNonNull(getSupportActionBar()).hide();
// Logging set to help debug issues, remove before releasing your app.
OneSignal.setLogLevel(OneSignal.LOG_LEVEL.VERBOSE, OneSignal.LOG_LEVEL.NONE);
// OneSignal Initialization
OneSignal.startInit(this)
.inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
.unsubscribeWhenNotificationsAreDisabled(true)
.init();
setContentView(R.layout.activity_main);
WebView webView = findViewById(R.id.webView);
WebSettings settings = webView.getSettings();
webView.loadUrl("https://ru.stackoverflow.com/");
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSaveFormData(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setSupportMultipleWindows(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setCacheMode(2);
webView.getSettings().setLoadWithOverviewMode(true);
webView.setWebContentsDebuggingEnabled(true);
webView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; Android 7.1; Mi A1 Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36");
this.getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
}
@Override
public void onBackPressed(){
if (webView.canGoBack()){
webView.goBack();
Toast.makeText(this,"Go Back",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(this,"Exit",Toast.LENGTH_SHORT).show();
super.onBackPressed();
}
}
WebViewClient webViewClient = new WebViewClient() {
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@TargetApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
};
webView.setWebViewClient(webViewClient);
}
}
Код для кнопки
}
@Override
public void onBackPressed(){
if (webView.canGoBack()){
webView.goBack();
Toast.makeText(this,"Go Back",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(this,"Exit",Toast.LENGTH_SHORT).show();
super.onBackPressed();
}
}
Если webView.setWebViewClient(webViewClient); вставить до webView.loadUrl("https://ru.stackoverflow.com/"); , то приложение компилируется,но все равно вылетает при нажатии клавиши back
Думаю вам нужно подтянуть теорию по структуре класса и области видимости переменных.
Не знаю насколько в этом поможет готовый код, но разжёвывать что к чему долго и нудно.
package com.example.app1;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import com.onesignal.OneSignal;
import java.util.Objects;
public class MainActivity extends AppCompatActivity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Objects.requireNonNull(getSupportActionBar()).hide();
// Logging set to help debug issues, remove before releasing your app.
OneSignal.setLogLevel(OneSignal.LOG_LEVEL.VERBOSE, OneSignal.LOG_LEVEL.NONE);
// OneSignal Initialization
OneSignal.startInit(this)
.inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
.unsubscribeWhenNotificationsAreDisabled(true)
.init();
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
WebSettings settings = webView.getSettings();
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSaveFormData(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setSupportMultipleWindows(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.getSettings().setLoadWithOverviewMode(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView.setWebContentsDebuggingEnabled(true);
}
webView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; Android 7.1; Mi A1 Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36");
this.getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("https://ru.stackoverflow.com/");
}
@Override
public void onBackPressed(){
if (webView.canGoBack()){
webView.goBack();
Toast.makeText(this,"Go Back",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"Exit",Toast.LENGTH_SHORT).show();
super.onBackPressed();
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Изучаю тему сервлетовСтолкнулся с такой проблемой, что html и jsp работают, однако когда я пытаюсь зайти на страницу сервлета (адрес http://localhost:8080/SE/hello),...
Подскажите, пожалуйста, в чем может быть проблемаПосле запуска spring-boot приложения и попытки аутентификации, появляется exception:
Всем добрый вечер, в процессе проекта у меня возникла потребность работать с архивами через ZipFile Вообщем, суть проблемы заключается в том,что...
задумался сделать большой проект для резюмеСам проект это приложение для контроля рабочих: