2012-12-26 3 views
7

La mia app richiede un nome utente da aggiungere per funzionare correttamente. L'attività principale visualizza il nome utente in alto che recupera dal database. MainActivity ha anche un pulsante che porta all'attività 'nomeutente' tramite il metodo startActivityForResult(); quando l'utente inserisce effettivamente un nome utente, solo il nome utente sull'attività principale viene aggiornato e visualizzato. C'è un pulsante di invio sull'attività "nomeutente" che aggiunge il nome utente e fa setResult(RESULT_OK);
Tutto funziona correttamente se si immette il nome utente facendo clic sul pulsante "nome utente".Come usare startActivityForResult() attraverso un DialogFragment?

Ora, ho aggiunto un dialogo in mainActivity che viene visualizzato quando l'app viene avviata solo se non esiste alcun nome utente nel database. Il dialogo offre un'opzione per aggiungere il nome utente, che se cliccato, porta all'attività "nome utente". Ma dopo aver premuto il tasto 'Invia' la mainActivity venga chiamato, ma il nome utente non viene aggiornata (anche se, il database viene aggiornato)

Ecco il codice per l'attività 'addusername':

public void submitusername(View view) { 

    userdatabase name = new userdatabase(this); 
    name.open(); 
    String user = name.getusername(); 
    name.close(); 

    EditText cinone = (EditText) findViewById(R.id.username); 
    username = cinone.getText().toString(); 

    if(user.equals("")) { 

     userdatabase entry = new userdatabase(Editprofile.this); 
     entry.open(); 
     entry.createEntry(username, null, null, null); 
     entry.close(); 

     Context context = getApplicationContext(); 
     CharSequence text = "Added new user!"; 
     int duration = Toast.LENGTH_LONG; 

     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 

    } 

    else { 

     userdatabase update = new userdatabase(Editprofile.this); 
     update.open(); 
     update.updateUsername(username); 
     update.close(); 

     Context context = getApplicationContext(); 
     CharSequence text = "Username updated!"; 
     int duration = Toast.LENGTH_SHORT; 

     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 

    } 

    setResult(RESULT_OK);  
    finish(); 

} 

Qui è il codice per la finestra di dialogo:

public class NouserFragment extends DialogFragment { 


@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    // Use the Builder class for convenient dialog construction 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setMessage(R.string.nouseralert) 
      .setPositiveButton(R.string.add, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 

        Intent intent = new Intent(getActivity().getBaseContext(), Editprofile.class);  
        startActivity(intent);  

       } 
      }) 
      .setNegativeButton(R.string.ignore, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        // User cancelled the dialog 
       } 
      }); 
    // Create the AlertDialog object and return it 
    return builder.create(); 
} 
} 

capisco questo sta accadendo metodo perché la finestra di dialogo non chiama startSubActivity(). Ma anche se cambio il mio codice, in questo modo:

Intent intent = new Intent(getActivity().getBaseContext(), Editprofile.class);  
        startActivityForResult(intent, 0); 

Ancora non aiuta. Probabilmente perché il metodo onActivityResult() non si trova nella stessa classe da cui è stato chiamato startActivityForResult(), ma non so come ottenerlo dopo.

EDIT 1: Provato usando

Intent intent = new Intent(getActivity(), Editprofile.class); 
startActivityForResult(intent, 0); 

Nessun uso.

risposta

11

Hai provato questo modo:

Intent intent = new Intent(getActivity(), Editprofile.class); 
startActivityForResult(intent, 0); 

Quando si crea l'oggetto Intento si utilizza il BaseContext, invece di utilizzare il riferimento all'attività stessa.

+0

Appena provato. Ancora non funziona. –

6

Utilizzando

Intent intent = new Intent(getActivity(), Editprofile.class); 
getActivity().startActivityForResult(intent, 0); 

lavorato!

+4

@vchelbanster si merita il credito per questa risposta –

+0

@RandyFreak fatto. –