Ti posto tutto il codice così capisci meglio.
Ho questa sotto attività che chiamo dal menù a tendina:
Io vorrei salvare dall' "editText01" il valore che inserisco e metterlo in questo file delle preferenze e stamparlo subito (per vedere se tutto funziona bene) nella "textView03".
Appena clicco sul bottone del menù a tendina per avviare la sotto attività questa mi crasha.
Da quanto ho capito dal tutorial che ho usato le SharedPreferences vogliono un file (che io ho chiamato "mypref" come vedi dalla classe SubActivity.java) nel quale sarà contenuto questo valore che voglio salvare.
Sto usando bene le Shared Preferences??
Tra l'altro vorrei poter dire all'xml che il valore dell'edit text è solo numerico, l'ho fatto mettendo la proprietà android:numeric="decimal" ma non so se basta!!
Il tutorial: [facile] Semplice esempio di Shared Preferences - Android Developers Italia
Spero sia utile!!
codice:
package mieapplicazioni.menudemo;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class SubActivity extends Activity {
private static int range;
// Costante relativa al nome del file preferenze
private final static String MY_PREFERENCES = "mypref";
// Costante relativa al nome della particolare preferenza
private final static String TEXT_DATA_KEY = "textData";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = (Button)findViewById(R.id.Button01);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
//Otteniamo il riferimento alle Preferences
SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
// Otteniamo il corrispondente Editor
SharedPreferences.Editor editor = prefs.edit();
// Modifichiamo il valore con quello inserito nell'EditText
EditText outputView = (EditText)findViewById(R.id.EditText01);
CharSequence textData = outputView.getText();
if (textData != null) {
// Lo salviamo nelle Preferences
editor.putString(TEXT_DATA_KEY, textData.toString());
editor.commit();
}
updatePreferencesData();
/*Chiudo la sub-attivià*/
finish();
}
});
setContentView(R.layout.subactivitylayout);
updatePreferencesData();
}
private void updatePreferencesData(){
// Leggiamo le Preferences
SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
// Leggiamo l'informazione associata alla proprietà TEXT_DATA
String textData = prefs.getString(TEXT_DATA_KEY, "No Preferences!");
// Lo impostiamo alla TextView che mostra il range selezionato
TextView outputText = (TextView)findViewById(R.id.TextView03);
outputText.setText(textData);
}
public static int getRange(){
return range;
}
public static void setRange(int nuovoRange){
range = nuovoRange;
}
}
codice:
package mieapplicazioni.menudemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MenuDemo extends Activity {
/* E' buon uso avere della variabili per specificare l'id degli elemti del menù*/
private static final int MENUITEM_COMANDO_1 = 1;
private static final int MENUITEM_COMANDO_2 = 2;
private static final int MENUITEM_COMANDO_3 = 3;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/* Con questo metodo creo il menù, l'argomento Menu agginunge degli elementi
* e ogni elemento MenuItem setta la sua icona*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem comando1 = menu.add(Menu.NONE, MENUITEM_COMANDO_1, 1, "Set Range");
comando1.setIcon(R.drawable.icon);
MenuItem comando2 = menu.add(Menu.NONE, MENUITEM_COMANDO_2, 2, "Comando 2");
comando2.setIcon(R.drawable.icon);
MenuItem comando3 = menu.add(Menu.NONE, MENUITEM_COMANDO_3, 3, "Comando 3");
comando3.setIcon(R.drawable.icon);
return true;
}
/* Questo metodo gestisce gli eventi di ogni singolo tasto del menù recuperando
* il suo id e tramite uno switch descrivendo per ogni caso un'azione*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case MENUITEM_COMANDO_1:
//Toast.makeText(this, "Comando 1", Toast.LENGTH_SHORT).show();
startSubActivity();
return true;
case MENUITEM_COMANDO_2:
Toast.makeText(this, "Comando 2", Toast.LENGTH_SHORT).show();
return true;
case MENUITEM_COMANDO_3:
Toast.makeText(this, "Comando 3", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
/* Con l'oggetto Intent dico quale attività dovrà essere lanciata, con
* startActivity quell'attività si avvierà occupando effettivamente lo schermo*/
private void startSubActivity() {
Intent intent = new Intent(this, SubActivity.class);
startActivity(intent);
}
}
Dentro il metodo onOptionsItemSelected(MenuItem item) lancio la sotto attività:
codice:
startSubActivity();
che poi definisco più sotto
Questo è ilo layout della sotto attività, non di quella principale che è il default
codice:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TableLayout android:id="@+id/TableLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TableRow android:id="@+id/TableRow01" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:text="Set Range: " android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<!--sotto una editText numerica -->
<EditText android:numeric="decimal" android:text="" android:id="@+id/EditText01" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
</TableRow>
<TableRow android:id="@+id/TableRow02" android:layout_width="wrap_content" android:layout_height="wrap_content">
<Button android:text="Cerca" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</TableRow>
<TableRow android:id="@+id/TableRow03" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:text="Range selezionato: " android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<!--sotto una textView numerica -->
<TextView android:numeric="decimal" android:text="" android:id="@+id/TextView03" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</TableRow>
</TableLayout>
</LinearLayout>