2012-12-26 15 views
7

Meine App benötigt einen Benutzernamen, der hinzugefügt werden muss, um ordnungsgemäß zu funktionieren. Die mainActivity zeigt den Benutzernamen oben an, der von der Datenbank abgerufen wird. Die mainActivity hat auch eine Schaltfläche, die über die Methode startActivityForResult() zur Aktivität 'addusername' führt. Wenn der Benutzer tatsächlich einen Benutzernamen eingibt, wird nur der Benutzername für die Hauptaktivität aktualisiert und angezeigt. Es gibt eine Schaltfläche zum Absenden der Aktivität 'addusername', die den Benutzernamen hinzufügt und tut setResult(RESULT_OK);
Alles funktioniert gut, wenn der Benutzername eingegeben wird, indem Sie auf die Schaltfläche 'addusername' klicken.Wie verwendet man startActivityForResult() über ein DialogFragment?

Jetzt habe ich einen Dialog in mainActivity hinzugefügt, der beim Start der App angezeigt wird, wenn in der Datenbank kein Benutzername existiert. Der Dialog bietet eine Option zum Hinzufügen eines Benutzernamens. Wenn Sie darauf klicken, wird die Aktivität 'addusername' ausgeführt. Aber durch Drücken der Schaltfläche ‚Senden‘ die mainActivity wird aufgerufen, aber der Benutzername wird nicht aktualisiert (obwohl, wird die Datenbank aktualisiert werden)

Hier ist der Code für ‚addusername‘ Aktivität:

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(); 

} 

Hier für Dialog ist der Code:

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(); 
} 
} 

ich verstehe dies geschieht, weil der Dialog startActivityForResult nicht nennen() -Methode. Aber selbst wenn ich meinen Code ändere, wie folgt:

Es hilft immer noch nicht. Wahrscheinlich, weil die onActivityResult() -Methode nicht in derselben Klasse liegt, von der startActivityForResult() aufgerufen wurde, aber ich weiß nicht, wie ich danach komme.

EDIT 1: Versuchte

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

kein Gebrauch verwenden.

Antwort

11

Haben Sie auf diese Weise versucht:

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

Wenn Sie das Intent Objekt Sie die BaseContext verwenden erstellen, anstatt selbst den Hinweis auf die Aktivität der Verwendung.

+0

Einfach versucht. Funktioniert immer noch nicht. –

6

Mit

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

gearbeitet!

+4

@vchelbanster verdient die Anerkennung für diese Antwort –

+0

@RandyFreak getan. –

Verwandte Themen