Allora l'app si apre con un dialog che richiede di inserire un nome, premendo "Continue" viene stampato un messaggio di benvenuto personalizzato, altrimenti premendo "Cancel" il messaggio non viene personalizzato. Ho fatto in modo che il dialog si apra solo la prima volta utilizzando una variabile statica, non so se è da cioccolataio ma al momento non mi veniva in mente altro
codice:
public class MainActivity extends AppCompatActivity
{
private static boolean firstTime = true;
private TextView welcoming = null;
private String welcomingString = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(firstTime)
showDialogForm();
welcoming = (TextView) findViewById(R.id.welcoming);
welcomingString = (String) welcoming.getText();
}
private void showDialogForm()
{
final Dialog d=new Dialog(this);
d.setCancelable(false);
d.setContentView(R.layout.dialog_login);
d.show();
Button continueButton = (Button) d.findViewById(R.id.continueButton);
Button cancelButton = (Button) d.findViewById(R.id.cancelButton);
continueButton.setOnClickListener
(
new View.OnClickListener()
{
@Override
public void onClick(View view)
{
EditText name = (EditText) d.findViewById(R.id.account_name);
welcoming.setText("Welcome " +name.getText()+ ", this is my application!");
welcoming.setTextSize(20);
welcomingString = (String) welcoming.getText();
d.cancel();
}
}
);
cancelButton.setOnClickListener
(
new View.OnClickListener()
{
@Override
public void onClick(View view)
{
welcoming.setText("Welcome, this is my application!");
welcoming.setTextSize(20);
d.cancel();
}
}
);
firstTime = false;
}
Dopodichè i due metodi:
codice:
@Override
public void onSaveInstanceState (Bundle state)
{
super.onSaveInstanceState(state);
state.putString("WelcomingText", welcomingString);
}
@Override
public void onRestoreInstanceState (Bundle state)
{
super.onRestoreInstanceState(state);
welcoming.setText(state.getString("WelcomingText"));
}
Ho pensato anche io che onRestore non venisse chiamato per quel motivo, ma ho anche letto sulla documentazione che il Bundle che riceve l'onCreate è lo stesso su cui salvo le cose nell'onSave, quindi ho provato a recuperare la stringa dall'onCreate ma il bundle risulta sempre null.