Per chiudere correttamente un Activity si usa “this.finish()”. Ma questo comporta la chiusura dell’activity in cui siamo, se è un Activity principale si uscirà totalmente dall’applicazione, altrimenti torneremo all’Activity precedente. Se per esempio abbiamo un menu come Activity secondaria, e vogliamo che dal menu sia possibile chiudere totalmente l’applicazione, dovremmo aprire il menu con un Activity for result.
Esempio:
Creiamo un menu.xml con una TexView da usare per la lista del menu (MyMenu.java)
Creiamo poi la classe MyMenu.java che conterrà due voci, “Back” per tornare all’Activity principale, e “Quit” per chiudere l’applicazione.codice:<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" android:textSize="20sp" android:textColor="#000000" > </TextView>
Nello switch di onListItemClick infatti, vediamo che in “case 0” viene eseguito un semplice this.finish(), mentre in “case 1” (ovvero quando premiamo Quit) viene eseguito setResult(123) e poi this.finish(). setResult(123) serve per impostare un risultato che deve ritornare l’Activity MyMenu quando viene chiusa.
Nell’Activity principale, MainActivity.java, creeremo un bottone per avviare l’Activity MyMenu.java, come vediamo non usiamo il classico startActivity, ma startActivityForResult().codice:public class MyMenu extends ListActivity { private static final String[] names = new String[] { "Back", "Quit" }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(new ArrayAdapter<String>(this, R.layout.menu, names)); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); switch(position) { case 0: this.finish(); break; case 1: setResult(123); this.finish(); } } }
Poi scriviamo il metodo onActivityResult che al suo interno controllerà se il resultCode è uguale a 123, quello che abbiamo impostato in MyMenu.java ( setResult(123) ), in caso positivo esegue this.finish(), e quindi chiude l’applicazione.
Ricordiamoci poi di inserire nel manifest.xml i permessi per MyMenu.java.codice:public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startActivityForResult(new Intent(getApplicationContext(), MyMenu.class), 0); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if(resultCode == 123) { this.finish(); } } }
Tips & Tricks:
Se volete inserire la classica finestra di richiesta conferma per l’uscita dall’applicazione, vi basterà inserire il seguente codice in “case 1” (alla pressione del tasto Quit) in MyMenu.java
Fonte del Tutorial: www.startingpixel.comcodice:@Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); switch(position) { case 0: this.finish(); break; case 1: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Sicuro di voler uscire?") .setCancelable(false) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { setResult(123); finish(); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); break; } }
Download del Sorgente: Link

LinkBack URL
About LinkBacks
Ultima modifica di Hhaunted; 29-07-13 alle
Rispondi quotando