Póki co dotarłem do takiego rozwiązania:
public void onClick(View view) { Intent intent; switch (view.getId()) { case R.id.butpocz: intent = new Intent(menu.this, jav_c1.class); startActivity(intent); break; case R.id.butostatniootwarte: try
{ Class<?> lastActivity = Class.forName(info); intent = new Intent(menu.this, lastActivity); startActivity(intent); break; } catch (ClassNotFoundException e) { textView6.setText ("błąd"); break; }
I po takim rozwiązaniu nie wywala mi żadnych błędów przy starcie. W sensie, że nic nie świeci się na czerwono i program startuje normalnie. Nazwa activity ostatnio otwartego zapisuje się do shared preferences, ta przekazuje dane do stringa o nazwie "info"i ten pokazuje nazwę activity, które było ostatnio otwarte w okienku specjalnie stworzonym żeby sprawdzić poprawność wykonywania programu do tego momentu. Podpinając do drugiego buttona "butostatniootwarte" catch/try wpisując w Class.forName nazwę tego stringa, który przechowuje nazwę ostatnio otwartego activity, nie wywala żadnych błędów. No ale po starcie programu i upewnieniu się, że jest zapisana nazwa ostatniej activity w "info", gdy przycisnę "butostatniootwarte", to program jakby uruchamia się od początku. Jakieś sugestie choćby ???
Witam. Może się to komuś przyda. Podaję rozwiązanie problemu. A więc, w aktywnościach, które chcemy, by mogły być przywoływane później w menu głównym wciśnięciem buttonu np. "wczytaj ostatnią aktywność", zapisujemy ich nazwę w shared preferences. Czyli np.
SharedPreferences myPreferences = getSharedPreferences("file",MODE_PRIVATE);
SharedPreferences.Editor myEditor = myPreferences.edit();
myEditor.putString("key", getClass().getName());
myEditor.commit();
Zwróćcie uwagę na użycie getClass().getName() , co upraszcza nam wpisanie nazwy Aktywności do shared preferences i gwarantuje, że zapisana ona zostanie w poprawny sposób, bez literówek.
Następnie w głównym menu (i tutaj głównie popełniałem mój błąd) przywołujemy shared preferences ale w samej metodzie onClick, a nie w onCreate (jak robiłem to do tej pory). Poza tym, niezbędne będzie użycie try/catch.Czyli ma to mieć postać:
public void onClick(View view) {
Intent intent;
switch (view.getId()) {
case R.id.buttonpoczatek:
Intent a = new Intent(menu.this, aktywnoscstartowa.class);
startActivity(a);
break;
case R.id.buttonostatniootwarte:
SharedPreferences myPreferences = getSharedPreferences("file", MODE_PRIVATE);
String wgraj = myPreferences.getString("key", "");
Class<?> ostatniaaktywnosc;
try {
ostatniaaktywnosc = Class.forName(wgraj);
Intent b = new Intent(menu.this, ostatniaaktywnosc);
startActivity(b);
break;
} catch (ClassNotFoundException e) {
textView6.setText("błąd");
break;
Testowałem na kilku aktywnościach, w tejktórą chciałem, by mogła być przywoływana jako ostatnio otwarta, uruchamiałem shared preferences, żeby zapisało jej nazwę. Każde przejście do innej aktywności nadpisywało shared preferences uaktualniając dane o ostatnio otwartej aktywności. W menu głównym te dane shared preferences były wpisywane do stringa, a string był wykorzystywany w switch połączonym z catch/try, tak jak jest powyżej.