Как использовать startActivityForResult () через DialogFragment?

Мое приложение требует, чтобы имя пользователя было добавлено для правильной работы. В mainActivity отображается имя пользователя сверху, которое он извлекает из базы данных. В mainActivity также есть кнопка, которая приводит к активности «addusername» с помощью метода startActivityForResult (); Когда пользователь фактически вводит имя пользователя, тогда только обновление имени пользователя по основному действию обновляется и отображается. Существует кнопка отправки в действие «addusername», которая добавляет имя пользователя и делает setResult(RESULT_OK);
Все работает нормально, если имя пользователя введено нажатием кнопки «addusername».

Теперь я добавил диалог в mainActivity, который отображается, когда приложение запускается, только если в базе данных нет имени пользователя. Диалог дает возможность добавить имя пользователя, которое, если щелкнуть, приведет к активности «addusername». Но после нажатия кнопки «Отправить» mainActivity вызывается, но имя пользователя не обновляется (хотя база данных обновляется)

Вот код для активности «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(); } 

Вот код для Dialog:

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

Я понимаю, что это происходит потому, что Dialog не вызывает метод startActivityForResult (). Но даже если я изменю свой код, вот так:

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

Это все равно не помогает. Вероятно, потому что метод onActivityResult () не лежит в том же классе, из которого был вызван startActivityForResult (), но я не знаю, как это сделать.

РЕДАКТИРОВАТЬ 1: Пробовал использовать

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

Не использовать.

Solutions Collecting From Web of "Как использовать startActivityForResult () через DialogFragment?"

Пробовали ли вы так:

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

Когда вы создаете объект Intent, вы используете BaseContext, вместо того, чтобы использовать ссылку на сами действия.

С помощью

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

работал!