finishActivity() - zamykanie wszystkich aktywności z danym requestCode

0

Dzień dobry. Mam problem z zamykaniem aktywności w mojej (pierwszej) aplikacji w Androidzie. Być może moglibyście mi pomóc? Będę ogromnie wdzięczna!

Aktywność klasy A uruchamia aktywność klasy B. Następnie kilka razy wywoływane są aktywności klasy B. Za każdym razem odbywa się to przez startActivityForResult (intent, REQUEST_CODE_A) (requestCode jest za każdym razem taki sam). Z ostatniej aktywności chciałabym wrócić do aktywności klasy A. Czyli zamknąć wszystkie dotychczas otwarte aktywności. Ponieważ wszystkie są z tym samym 'requestCode' zrobiłam to przez finishActivity(REQUEST_CODE_A) (żeby zamknąć wszystkie otwarte wcześniej) i potem finish() (żeby zamknąć najnowszą). Rezultat: zamyka się najnowsza, pozostałe nie. Z czego może wynikać błąd? Może źle rozumiem dokumentację? Początkująca będzie ogromnie wdzięczna za pomoc. Dziękuję z góry!

Może jednak wkleję swój kod (jego fragmenty odpowiedzialne za powyższe).

MainActivity.class

public void browseFiles (View v) throws IOException {
        Intent intent = new Intent(this, FileListActivity.class);
        intent.putExtra(path, "/");
        startActivityForResult(intent, R.integer.REQUEST_CHOOSE_A_SONG);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode,resultCode,data);
        switch(requestCode){
            case R.integer.REQUEST_CHOOSE_A_SONG:
                if(resultCode == RESULT_OK) try {
                    mediaPlayer.setDataSource(this, Uri.parse(data.getStringExtra(path)) );
                } catch (IOException e) {
                    e.printStackTrace();
                }

        }
    }

FileListActivity.class

if(new File(fileName).isDirectory()){
            intent = new Intent(this, FileListActivity.class);
            intent.putExtra("path", fileName);
            startActivityForResult(intent, R.integer.REQUEST_CHOOSE_A_SONG);
        }
        else {
            intent = new Intent();
            intent.putExtra("path", fileName);
            setResult(RESULT_OK, intent);
            finishActivity(R.integer.REQUEST_CHOOSE_A_SONG);
            Toast.makeText(this, fileName + " set to play!", Toast.LENGTH_SHORT).show();
            finish();
        }

dodanie znaczników <code class="java"> - Furious Programming

0

Spróbuj wrócić do głównej aktywności tak:

Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
0

Spróbuję. Ale dwa pytania mi się od razu nasuwają: po pierwsze czy ww taki sposób wykona się "onActivityResult"? A po drugie, docelowo, to niekoniecznie będzie MainActivity. Zadziała z inna aktywnością "docelową"? No i ostatecznie warto w sumie wiedzieć czemu mój kod nie działa. ... to by była dobra lekcja....

Dziękuję za zainteresowanie tematem i podpowiedź!

0

http://square.github.io/otto/ - użyj tego. Stwórz klasę np. FinishEvent i roześlij po całej aplikacji. Będziesz mogła je odebrać we wszystkich zarejestrowanych aktywnościach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1