Autore Topic: Aggiornamento dinamico AlertDialog  (Letto 1315 volte)

Offline teogrem

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows 7
Aggiornamento dinamico AlertDialog
« il: 29 Novembre 2011, 12:33:03 CET »
0
Ciao a tutti, il mio problema è questo, ho creato una PreferenceActivity per impostare il profilo dell'utente attraverso due EditText, tutto questo viene fatto all'interno di un AlertDialog che appare quando si clicca sul pulsante "Profilo" nel menù; quello che non sto riuscendo a fare è di cambiare il titolo dell'alert a seconda dell'input inserito, per capirci, se i dati del profilo utente corrispondo, quando faccio il commit al posto del titolo dell'alert comparirà il nome e il cognome dell'utente presenti sul db, e fino a qui tutto bene, mentre se clicco sul il pulsante per il reset degli edittext vorrei che venisse resettato anche il titolo dell'alert ossia che sparisse il nome dell'utente profilato in precedenza.
Spero di essermi spiegato, di seguito posto il codice che si occupa di fare questa procedura:

Codice (Java): [Seleziona]
protected void startDialog() {

        ArrayList<HashMap<String, String>>  mylist = new ArrayList<HashMap<String, String>>();
        WebServiceS webServices = new WebServiceS();
       
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
       
        inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
        layout = inflater.inflate(R.layout.profile,null);
           
        /*Aggiorno il valore dei campi*/
           
        final EditText et_matricola = (EditText) layout.findViewById(R.id.et_matricola);
        final EditText et_pin = (EditText) layout.findViewById(R.id.et_pin);
       
        Button bt_reset_profilo = (Button) layout.findViewById(R.id.bt_reset_profilo);
       
        SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES,Context.MODE_PRIVATE);
        et_matricola.setText(prefs.getString(PREF_MATRICOLA, "Nessuna matricola"));
        et_pin.setText(prefs.getString(PREF_PIN, "Nessun pin!"));
           
        /**/
        if(!et_matricola.getText().equals("") && !et_pin.getText().equals(""))
                {
                matricola = et_matricola.getText().toString();
                pin = et_pin.getText().toString();
               
                try {
                       
                        mylist = webServices.recieveJSON(matricola,pin,"profilo");
                       
                        if(mylist.isEmpty())
                                {
                                        login = "ERROR";
                                }
                                else{
                                       
                                        name = mylist.get(0).get("name");
                                        surname = mylist.get(0).get("surname");
                                       
                                        flag = 1;
                                        login = "OK";
                                }
               
                } catch (JSONException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
       
            builder.setView(layout);
            builder.setIcon(R.drawable.profile);
           
            bt_reset_profilo.setOnClickListener(new OnClickListener() {
               
            @Override
            public void onClick(View v) {
               
                et_matricola.setText("");
                et_pin.setText("");
               
                /*Quando clicco sul tasto "Reset" tento di riscrivere il titolo della dialog*/
                /*Questa è la parte che non riesco a fare*/
                builder.setTitle("Profilo");
               
            }
               
        });
           
            if(flag == 1)
                builder.setTitle(name+" "+surname);
            else
                builder.setTitle("PROFILO");
       
        /**/
       
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                EditText et_matricola = (EditText) ((Dialog) dialog).findViewById(R.id.et_matricola);
                EditText et_pin = (EditText) ((Dialog) dialog).findViewById(R.id.et_pin);
               
                SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
               
                Editor editor = prefs.edit();
               
                editor.putString(PREF_MATRICOLA, et_matricola.getText().toString());
               
                editor.putString(PREF_PIN, et_pin.getText().toString());
               
                editor.commit();
               
                if(et_matricola.getText().toString().equals("") && et_pin.getText().toString().equals(""))
                {
                        Toast.makeText(getApplicationContext(),
                                                "Profilo resettato", Toast.LENGTH_LONG).show();
                }
                else{
                       
                        Toast.makeText(getApplicationContext(),
                                                "Profilo impostato", Toast.LENGTH_LONG).show();
                }
               
                Intent i = new Intent(ProfilePreferenceActivity.this, MainActivity.class);
                startActivity(i);
               
             }
        });
           
            builder.setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                                finish();
                        }
                });

            AlertDialog profileDialog = builder.create();
            profileDialog.show();
               
        }

Ringrazio in anticipo chi mi darà una mano.

Offline teogrem

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows 7
Re:Aggiornamento dinamico AlertDialog
« Risposta #1 il: 01 Dicembre 2011, 10:16:46 CET »
0
Non c'è nessuno che riesce ad aiutarmi?

Offline blaykry

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    w7
Re:Aggiornamento dinamico AlertDialog
« Risposta #2 il: 03 Dicembre 2011, 11:41:32 CET »
0
Partendo dal presupposto che non sono un'esperto, dove è inserito il metodo startDialog() ? da quello che so gli AlertDialog hanno un onCreateDialog() dove puoi impostare i dati, ma se li vuoi aggiornare devi farlo nell' onPrepareDialog(). cmq se posti tutto il codice mancante si può capire di più.

Offline teogrem

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows 7
Re:Aggiornamento dinamico AlertDialog
« Risposta #3 il: 06 Dicembre 2011, 14:32:30 CET »
0
Intanto grazie per avermi risposto, anche io non sono un esperto, questo è tutto il codice dell'activity:

Codice (Java): [Seleziona]
public class ProfilePreferenceActivity extends PreferenceActivity {
       
    public static final String MY_PREFERENCES = "MyPref";
   
    public static final String PREF_MATRICOLA = "matricola";
    public static final String PREF_PIN = "pin";
   
    LayoutInflater inflater;
   
    View layout;
   
    String matricola,name,surname,pin;
    String login="";
   
    int flag=0;
       
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           
            startDialog();
           
     }
   
    @Override
        protected void onStop() {
                super.onStop();
               
                finish();
        }
   
    protected void startDialog() {

        ArrayList<HashMap<String, String>>  mylist = new ArrayList<HashMap<String, String>>();
        WebServiceS webServices = new WebServiceS();
       
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
       
        inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
        layout = inflater.inflate(R.layout.profile,null);
           
        final EditText et_matricola = (EditText) layout.findViewById(R.id.et_matricola);
        final EditText et_pin = (EditText) layout.findViewById(R.id.et_pin);
       
        Button bt_reset_profilo = (Button) layout.findViewById(R.id.bt_reset_profilo);
       
        SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES,Context.MODE_PRIVATE);
        et_matricola.setText(prefs.getString(PREF_MATRICOLA, "0000"));
        et_pin.setText(prefs.getString(PREF_PIN, "0000!"));
           
        if(!et_matricola.getText().equals("") && !et_pin.getText().equals(""))
                {
                matricola = et_matricola.getText().toString();
                pin = et_pin.getText().toString();
               
                try {
                       
                        mylist = webServices.recieveJSON(matricola,pin,"profilo");
                       
                        if(mylist.isEmpty())
                                {
                                        login = "ERROR";
                                }
                                else{
                                       
                                        name = mylist.get(0).get("name");
                                        surname = mylist.get(0).get("surname");
                                       
                                        flag = 1;
                                        login = "OK";
                                }
               
                } catch (JSONException e) {
                                e.printStackTrace();
                        }
                }
       
            builder.setView(layout);
            builder.setIcon(R.drawable.profile);
           
            bt_reset_profilo.setOnClickListener(new OnClickListener() {
               
            @Override
            public void onClick(View v) {
               
                et_matricola.setText("");
                et_pin.setText("");
               
                /*Qui è dove vorrei cambiare il titolo dell'alert*/
                builder.setTitle("Profilo");
            }
               
        });
           
            if(flag == 1)
                builder.setTitle(name+" "+surname);
            else
                builder.setTitle("PROFILO");
       
       
       
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                EditText et_matricola = (EditText) ((Dialog) dialog).findViewById(R.id.et_matricola);
                EditText et_pin = (EditText) ((Dialog) dialog).findViewById(R.id.et_pin);
               
                SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
               
                Editor editor = prefs.edit();
               
                editor.putString(PREF_MATRICOLA, et_matricola.getText().toString());
                //Log.i(LOG_TAG_FORM, et_matricola.getText().toString());
               
                editor.putString(PREF_PIN, et_pin.getText().toString());
                //Log.i(LOG_TAG_FORM, et_pin.getText().toString());
               
                editor.commit();
               
                if(et_matricola.getText().toString().equals("") && et_pin.getText().toString().equals(""))
                {
                        Toast.makeText(getApplicationContext(),
                                                "Profilo resettato correttamente", Toast.LENGTH_LONG).show();
                        finish();
                }
                else{
                       
                        ArrayList<HashMap<String, String>>  result = new ArrayList<HashMap<String, String>>();
                        WebServiceS wb = new WebServiceS();
                       
                        try {
                                                result = wb.recieveJSON(et_matricola.getText().toString(),et_pin.getText().toString(),"profilo");
                                               
                                                if(!result.isEmpty()){
                                                     Toast.makeText(getApplicationContext(),
                                                                "Profilo impostato correttamente", Toast.LENGTH_LONG).show();
                                }
                                else{
                                       
                                        Toast.makeText(getApplicationContext(),
                                                        "Errore nell'inserimento del profilo", Toast.LENGTH_LONG).show();
                                }
                                               
                                        } catch (JSONException e) {
                                                e.printStackTrace();
                                        }
                }
               
                Intent i = new Intent(ProfilePreferenceActivity.this, MainActivity.class);
                startActivity(i);
            }
        });
           
            builder.setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                                finish();
                        }
                });

            AlertDialog profileDialog = builder.create();
            profileDialog.show();
               
        }
     
}
« Ultima modifica: 06 Dicembre 2011, 14:35:21 CET da teogrem »

Offline teogrem

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows 7
Re:Aggiornamento dinamico AlertDialog
« Risposta #4 il: 13 Dicembre 2011, 11:19:05 CET »
0
Non c'è proprio nessuno che sa darmi qualche suggerimento?

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Aggiornamento dinamico AlertDialog
« Risposta #5 il: 13 Dicembre 2011, 12:47:07 CET »
0
Ciao! In sostanza il builder.setTitle() all'interno dell'onClick non fa effetto, ho capito bene? Potresti provare una cosa del genere:
Codice (Java): [Seleziona]
TextView titleView = new TextView(context)
builder.setCustomTitle(titleView);

//All'interno dell'onClickListener
onClick(View v){
titleView.setText(stringa che preferisci);
}

 :-)

Offline teogrem

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows 7
Re:Aggiornamento dinamico AlertDialog
« Risposta #6 il: 13 Dicembre 2011, 15:52:03 CET »
0
Grazie mille! con il tuo suggerimento sono riuscito a fare quello che volevo  :D