如何通过DialogFragment使用startActivityForResult()? - java

我的应用需要添加用户名才能正常运行。
mainActivity在其顶部从数据库中检索用户名。
mainActivity还具有一个按钮,该按钮通过startActivityForResult()方法导致“addusername”活动;当用户实际输入用户名时,只有主活动上的用户名会刷新并显示。
“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);

没用

参考方案

您是否尝试过这种方式:

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

创建Intent对象时,您将使用BaseContext,而不是使用对活动本身的引用。

为什么我不能在Java中重写方法wait()? - java

Improve this question 我在类wait()中找到了方法Object。这是最终的,这意味着该方法不能被覆盖。有什么想法为什么是最终的? 参考方案 @Flavio-这实际上是一个很好的问题。当然,您不能覆盖它的原因是设计师将其“确定为最终”。做出此决定的一些潜在原因:您不希望人们弄乱基本类(“对象”类)上基本操作的语义。由于它是“最终的”,因…

Web应用程序上的恶意用户是否可以操纵Web应用程序前端发送的输入(在表单数据旁边)? - java

Web应用程序上的恶意用户是否可以通过任何可能的方式来操纵Web应用程序前端发送的输入(当然,这不是在谈论FORM DATA),但是发送的请求例如当我允许他编辑他的个人资料或他的内容时,他可能会操纵ID(userId或contentId),从而可能恶意地对其他用户的内容进行邪恶?这些输入固定在网页上并且不可编辑,但用户仍然可以操纵它们吗?用户是否可能以这种方…

PHP或Java中的WCMS(适用于Java开发人员)? - java

在我公司,我们是一个Java开发人员团队。对于项目,我们需要首先选择一个Web内容管理系统(wcms)。我们可以选择一个php吗?我们是否将不得不学习php,因为我们的客户有一些特殊需求,所以我们可能不得不插入我们自己的功能...还是可以在Java中添加插件并找到连接它们的方法?这样做很普遍吗?考虑到我们的时间,我们负担不起学习php您认为我们最好转向Jav…

无法从上下文访问getContentResolver()? - java

我有两个类,MainActivity和DoHardWork。 DoHardWork扩展了AsyncTask,在该类中,我需要访问上下文以获取contentResolver并进行查询。没问题吧?让我们将其作为参数传递给DoHardWork: Context currCont = this; new DoHardWork(currCont).execute();…

什么时候在Hibernate中调用flush()和commit()? - java

我有以下情况: openSession() tx = session.beginTransaction(); try { ... session.saveOrUpdate(obj_1); ... session.saveOrUpdate(obj_2); ... session.saveOrUpdate(obj_3); session.flush(); tx.…