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.
Einfach versucht. Funktioniert immer noch nicht. –