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

标签 java android android-dialog

我的应用需要添加用户名才能正常运行。 mainActivity 在顶部显示它从数据库中检索到的用户名。 mainActivity 还有一个按钮,通过 startActivityForResult() 方法导致“addusername” Activity ;当用户实际输入用户名时,只有主 Activity 上的用户名会被刷新和显示。 “addusername” Activity 上有一个提交按钮,用于添加用户名并执行 setResult(RESULT_OK);
如果通过单击“添加用户名”按钮输入用户名,则一切正常。

现在,我在 mainActivity 中添加了一个对话框,仅当数据库中不存在用户名时,该对话框才会在应用程序启动时显示。该对话框提供了一个添加用户名的选项,如果单击该选项,将导致“添加用户名” Activity 。但是在按下“提交”按钮后,mainActivity 会被调用,但用户名不会刷新(尽管数据库会更新)

这是“添加用户名” Activity 的代码:

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

我知道这是因为 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,而不是使用对 Activity 本身的引用。

关于java - 如何通过 DialogFragment 使用 startActivityForResult()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14038436/

相关文章:

依赖配置的Java包导入

java - xpath获取表中的行

java - 后退按钮工作时操作栏主页按钮崩溃

android - 在 finish() 之后,发布到 Activity 的 Handler 的 Runnables 将继续执行多长时间?

android - 自定义数字时钟

java - 多方法程序中的控制流

java - 我的布局标记使用带有 ImageView 和 TextView 的 ScrollView 移动

android - 如何在按钮顶部创建对话框

android - 在 Android Dialog 中,如何为 startActivityForResult 设置 onActivityResult?

android - 对话框 : dim everything except some region