Zamknięcie wszystkich aktywności

0

Zamknięcie wszystkich aktywności jest dla mnie nie osiągalne. Próbowałam już kilka sposób żaden minie działa.

public class Ostatnia extends Activity {
    private static ArrayList<Activity> activities=new ArrayList<Activity>();
    private static final String TAG=Ostatnia.class.getName();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.potwierdzenie_wyslania);

    }
    private int values[];
        public void onClick(View s) {
           if(s.getId() == R.id.button_nie_wysylaj){

               Intent i = new Intent(Ostatnia.this, KilkaAktywnosciActivity.class);
               startActivity(i);
               i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
               if (values[1] == -32132313)
                   return;
               finishAll();
            }
            if(s.getId() == R.id.button_wyslij) // just for instance
            {
                SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
 
                values = new int[1000000];
                String wersja = preferences.getString("Version", "");
                String zadowolenie = preferences.getString("Satisfaction", "");
                String name = preferences.getString("Name", "");
                String surname = preferences.getString("Surname", "");
                String ilosc_aplikacji = preferences.getString("Quantity", "");
                if (!name.equalsIgnoreCase("")) {
            
                    Log.v("Name is ", name);
                    Log.v("Surname is ", surname);
                    Log.v("Version of system  is ", wersja);
                    Log.v(" satisfaction is ", zadowolenie);
                    Log.v("Quantity of aplication is ", ilosc_aplikacji);
                }

            }
            Intent i = new Intent(Ostatnia.this, KilkaAktywnosciActivity.class);
            startActivity(i);
            Ostatnia.finishAll();
        }
    public static void finishAll()
    {
        for(Activity activity:activities)
            activity.finish();
    }

}

To jedna z metod-nie działa. Próbowałam jeszcze:

Intent i = new Intent(OldActivity.this, NewActivity.class);
// set the new task and clear flags
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
startActivity(i);

i jeszcze jakiś...

samo finish() działa ale to mi usuwa tylko jedną aktywność, a ja potrzebuje wszystkie z stacka. Nie mogę też ustawić aby było NO_HISTORY bo dopóki nie zostanie wywołana metoda z tej aktywności potrzebuje mieć możliwość cofnięcia się

Tak, tak testuje dla butona w którym mam tego finishAll...

0
Intent i = new Intent(OldActivity.this, NewActivity.class);
// set the new task and clear flags
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
startActivity(i);

ten kod sprawi że zostanie usunięta aktywność ze stack'a i otwarta nowa. Nie będzie możliwości powrotu.

Startując nową aktywność sama możesz zdecydować czy starą chcesz usunąć czy zostawić zarządzając właśnie flagami.
Jeszcze jest coś takiego jak FLAG_ACTIVITY_CLEAR_TOP

Myślę że jako rozwiązanie można też napisać BroadcastReceiver który jeśli odbierze coś robi finish(), ale to też wiąże się z sendBroadcast() z aktywności.

dodanie znacznika <code class="java"> - @furious programming

0

Poradziłam sobie z tym, mimo że czytałam i wiedziałam że startactivity(i); ma być na końcu, po flagach etc i jest to logiczne. Robiłam inaczej i tego nie widziałam.

Zabawne jest to, że odłożyłam to na kilka dni i zrobiłam to kilka minut gdzieś do 25 minut, przed Twoim postem.

Myślę że jako rozwiązanie można też napisać BroadcastReceiver który jeśli odbierze coś robi finish(), ale to też wiąże się z sendBroadcast() z aktywności.

Broadcast kojarzy mi się z typem rozgłoszeniowym. Rozumiem że tu jest podobnie. Masz na myśli aby z ostatniej aktywności wysłać wiadomość i aby obsługa jej powodowała finish tak? Ale czy wtedy nie zamknie tylko ostatniej aktywności?

EDIT :Mam!!! Czy to nie tak że wyśle wiadomość w próżnie i odbiorą ją wszytskie? i dlatego się zamkną?

0

Nie nie, z tego co doczytałem (być może się mylę) to nie ma jako tako możliwości zrobienia closeAll(). Raczej trzeba stosować hacki typu

  public static void finishAll()
    {
        for(Activity activity:activities)
            activity.finish();
    }

Sam Broadcast też zamykał by aktywność z której został wywołany.

dodanie znacznika <code class="java"> - @furious programming

0

Chyba nie bardzo rozumiem, co masz na myśli. A funkcję którą napisałeś powyżej próbowałam zaimplementować (StackOverFlow? :D) Niestety nie działała. Możliwe że dałam w nieodpowiednim miejscu startactivity ale później to sprawdzę.

W każdym razie teraz mi działa i to najważniejsze. Dziękuje za informacje o Broadcast później, gdy inne przedmioty załatwię, wgłębię się w temat.

0

Raczej chodziło mi o to że trzeba kombinować, a nie że ten sposób działa.

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