Java 如何通过DialogFragment使用startActivityForResult()?

Java 如何通过DialogFragment使用startActivityForResult()?,java,android,android-dialog,Java,Android,Android Dialog,我的应用程序需要添加用户名才能正常运行。 main活动在顶部显示从数据库检索的用户名。 mainActivity还有一个按钮,通过startActivityForResult()方法引导“addusername”活动;当用户实际输入用户名时,仅刷新和显示主活动上的用户名。 “addusername”活动上有一个提交按钮,用于添加用户名并执行setResult(结果\u OK) 如果通过单击“添加用户名”按钮输入用户名,则一切正常 现在,我在mainActivity中添加了一个对话框,只有在数据库

我的应用程序需要添加用户名才能正常运行。 main活动在顶部显示从数据库检索的用户名。 mainActivity还有一个按钮,通过startActivityForResult()方法引导“addusername”活动;当用户实际输入用户名时,仅刷新和显示主活动上的用户名。 “addusername”活动上有一个提交按钮,用于添加用户名并执行
setResult(结果\u OK)
如果通过单击“添加用户名”按钮输入用户名,则一切正常

现在,我在mainActivity中添加了一个对话框,只有在数据库中不存在用户名的情况下,应用程序启动时才会显示该对话框。该对话框提供了添加用户名的选项,如果单击该选项,将导致“添加用户名”活动。但按下“提交”按钮后,会调用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();

}
以下是对话框的代码:

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();
}
}
我理解之所以会发生这种情况,是因为该对话框没有调用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);

没用。

你试过这种方法吗:

Intent intent = new Intent(getActivity(), Editprofile.class);
startActivityForResult(intent, 0);
创建意图对象时,使用BaseContext,而不是对活动本身的引用。

使用

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