@Chesterfield25

Как вернутся из одной активности в предыдущую не пересоздавая ее?

У меня есть простое webview приложение в котором встроенный сайт а точнее функционал написанный на js он находится в одной активности. Есть вторая активность в которой при открытии показывается межстраничная реклама и при закрытии рекламы идет возврат на предыдущую активность. Вот MainActivity В котором основной функционал
public class MainActivity extends AppCompatActivity {

    WebView webView;

    private static final String PREFS_COUNT = "MyPrefsFile";
    private static final String CLICK_COUNT_KEY = "clickCount";
    private int clickCount = 0;

    private SharedPreferences prefs;
    private static final String JS_INTERFACE_NAME = "AndroidInterface";

    @SuppressLint("WrongViewCast")
    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = findViewById(R.id.webView);

        prefs = getSharedPreferences(PREFS_COUNT, MODE_PRIVATE);
        clickCount = prefs.getInt(CLICK_COUNT_KEY, 0);
        
        WebSettings webSettings = webView.getSettings();
        webView.getSettings().setJavaScriptEnabled(true);
        webView.clearCache(true);
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        webView.setDrawingCacheEnabled(true);

        webSettings.setAllowContentAccess(true);
        webSettings.setAllowFileAccess(true);

        webSettings.setDatabaseEnabled(true);
        webSettings.setDomStorageEnabled(true);

        webSettings.setLoadWithOverviewMode(true);

        final Activity activity = this;

        webView.setWebViewClient(new WebViewClient() {
            @SuppressWarnings("deprecation")
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
            }

            @TargetApi(android.os.Build.VERSION_CODES.M)
            @Override
            public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
                // Redirect to deprecated method, so you can use it in all SDK versions
                onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
                webView.loadUrl("file:///android_asset/error.html");
            }
        });

        // Добавляем интерфейс для взаимодействия с JavaScript
        webView.addJavascriptInterface(new WebAppInterface(), JS_INTERFACE_NAME);

        webView.loadUrl("file:///android_asset/index.html");
    }

    // Класс для взаимодействия между WebView и JavaScripts
    public class WebAppInterface {
        @JavascriptInterface
        public void shareContent(String content) {
            // Выполните здесь свой код для обработки и передачи информации в социальные сети

            Intent intent = new Intent(
                    Intent.ACTION_SEND
            );
            intent.setType("text/plain");
            String Body = content;
            String Sub = "https://play.google.com/store/apps/details?id=com.buratinoapps.cryptocurrency.faucet.rotator";
            intent.putExtra(Intent.EXTRA_TEXT, Body);
            intent.putExtra(Intent.EXTRA_TEXT, Sub);
            startActivity(Intent.createChooser(intent, "Share using"));

            Toast.makeText(MainActivity.this, "Поделиться: " + content, Toast.LENGTH_SHORT).show();
        }

        @JavascriptInterface
        public void showedAds() {
            clickCount++;
            if (clickCount == 1 || clickCount % 30 == 0) {
                SharedPreferences.Editor editor = prefs.edit();
                editor.putInt(CLICK_COUNT_KEY, clickCount);
                editor.apply();
                Toast.makeText(MainActivity.this, "OK", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(MainActivity.this, AdsActivity.class);
                startActivityForResult(intent, 123);
                finish();
            }


        }

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 123) {  // Здесь 123 - это код запроса, указанный в startActivityForResult()
            // Обработайте результат из AdsActivity, если необходимо
        }
    }

}


Вторая активность в которой показывается реклама

public class AdsActivity extends AppCompatActivity {

    private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/1033173712";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ads);

        // Initialize the Mobile Ads SDK.
        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {}
        });
        loadAd();
    }

    private void loadAd() {
        AdRequest adRequest = new AdRequest.Builder().build();
        InterstitialAd.load(AdsActivity.this, AD_UNIT_ID, adRequest,
                new InterstitialAdLoadCallback() {
                    @Override
                    public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
                        // The mInterstitialAd reference will be null until
                        // an ad is loaded.
                        Log.i("Loaded", "onAdLoaded");
                        interstitialAd.show(AdsActivity.this);
                        interstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
                            @Override
                            public void onAdFailedToShowFullScreenContent(AdError adError) {
                                // Called when fullscreen content failed to show.
                                super.onAdFailedToShowFullScreenContent(adError);
                                Log.d("TAG", "The ad failed to show.");
                            }

                            @Override
                            public void onAdDismissedFullScreenContent() {
                                // Called when fullscreen content is dismissed.
                                super.onAdDismissedFullScreenContent();
                                Log.d("TAG", "The ad was dismissed.");
                                Intent intent = new Intent(AdsActivity.this, MainActivity.class);
                                startActivity(intent);
                                finish();
                            }

                            @Override
                            public void onAdShowedFullScreenContent() {
                                // Called when fullscreen content is shown.
                                // Make sure to set your reference to null so you don't
                                // show it a second time.
                                super.onAdShowedFullScreenContent();
                                Log.d("TAG", "The ad was shown.");
                            }
                        });
                    }

                    @Override
                    public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                        // Handle the error
                        Log.i("FailedError", loadAdError.getMessage());
                    }
                });
    }
}


Вкратце поясняю почему мною было решено использовать вторую активность для показа рекламы. Суть такова мне нужно что бы при каждом 30 нажатии на кнопку показывалась реклама, но так как реклама показывается только при открытии активности то сделать это невозможно зациклив показ рекламы, за месть этого было принято решение при каждом 30 нажатии открывать новую активность. А сама проблема заключается в том что у меня приложение которое генерирует рандомные цвета и в случае когда идет показ рекламы и возврат назад то цвет или цвета которые были сгенерированы не сохраняются, поэтому мне нужно после того как пользователю будет показана реклама он будет возвращаться назад к предыдущей активносте без ее пересоздания

64b800429deca718704849.png
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Chesterfield25 Автор вопроса
Уберите finish() в MainActivity, а в AdsActivity наоборот эти две строки удалите

Intent intent = new Intent(AdsActivity.this, MainActivity.class);
startActivity(intent);

В первой просто запускаете вторую, потом делаете второй finish(), первую заново создавать и запускать не надо, она там в стеке будет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы