如何通过 DialogFragment 使用 startActivityForResult() ?

2024-03-09

我的应用程序需要添加用户名才能正常运行。 mainActivity 在顶部显示从数据库检索的用户名。 mainActivity 还有一个按钮,可通过 startActivityForResult() 方法进入“addusername”活动;当用户实际输入用户名时,只有主活动上的用户名会被刷新和显示。 “addusername”活动上有一个提交按钮,用于添加用户名并执行setResult(RESULT_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);

No use.


您是否尝试过这种方式:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 DialogFragment 使用 startActivityForResult() ? 的相关文章

随机推荐

  • git 仓库中 Composer 包冲突;如何在推送到远程时取消跟踪文件但避免删除文件

    我通过 Composer 在我的 Web 应用程序上安装了一个包 并将包文件夹添加到 gitignore 同时提交composer json and composer lock 为了部署到我们的服务器 我们推送到服务器上的裸 Git 远程服
  • 如何延迟 AngularJS 即时搜索?

    我有一个似乎无法解决的性能问题 我有一个即时搜索 但它有点滞后 因为它开始搜索每个keyup JS var App angular module App App controller DisplayController function s
  • C++中高效比较字符串的方法

    像这样将一个字符串与另一个字符串或字符串文字进行比较是否有效 string a string b if a test or if a b 我的同事让我使用 memcmp 对此有何评论 Thanks Yes use a b 不要听你的同事的话
  • 如何在 Docker Compose 中初始化 MySql 数据库

    设想 我在 Spring 中开发了一个微服务 它使用 mysql 8 数据库 该数据库必须初始化 创建数据库 一些表和数据 在我的主机上 我使用 data sql 和 schema sql 脚本初始化了数据库 问题是 我必须设置 sprin
  • 在表单之间传递数据

    我有两种形式 第一的 Form1有一个组框 一些标签和一个列表框 我按下一个按钮 然后新的Form2打开并包含一些文本 我想将文本传输到Form2到列表框中Form1 到目前为止 我所做的是将列表框的修饰符设置为public然后将此代码放入
  • 如何从视图访问 django 模型属性?

    我有一个 Django 模型 class DebtRequest models Model from user models ForeignKey User related name debt requests from user to u
  • 从资源文件夹或SD卡访问文件有什么区别

    我正在开发一个应用程序 我必须使用三种不同大小的文件 1mb 5mb 15mb 我搜索了一下 然后知道我们可以将这些视频保存在资产文件夹中并可以使用这些视频 其次 我了解到我们可以将这些视频保存在资产文件夹中 并且安装时我们可以将所有视频移
  • Android 将 ParseObject 发送到另一个 Activity

    我有一个 ParseObject 我想发送到另一个活动 public class HWMMatch extends ParseObject implements Serializable public HWMMatch public Par
  • 查找数组中是否缺少元素的复杂性

    我正在尝试编写一个函数 用 C 语言 来检查数组是否包含所有元素 0 和 size 1 之间 例如 如果数组的大小为 3 则它应该具有 0 1 2 以任何顺序 问题是 在没有额外数组的情况下执行此操作的最有效的复杂性是多少 我的尝试的复杂性
  • 与 char *、unsigned char * 和signed char * 别名

    A char 和合格的变体 可以为任何东西起别名 是signed char and unsigned char 及其合格的变体 不受此限制 换句话说 我了解到申请是个好主意restrict to char 函数参数 如果我不希望它们为其他类
  • GWT - 构造 Java AST 时出错

    编译过程中可能是什么原因导致此错误 我已经从这个原型生成了项目https github com ArcBees Arcbees Archetypes https github com ArcBees Arcbees Archetypes我只
  • OpenGL ES 和 OpenGL 兼容着色器

    我想要 OpenGL ES 和 OpenGL Windows 具有相同的着色器源 为此 我想定义自定义数据类型并仅使用 OpenGL ES 函数 一种方法是定义 define highp define mediump define lowp
  • JavaFX 8 计算“textarea”中的行数

    我们正在尝试计算 TextArea 中的行数以下是 TextArea 属性 PrefWidth 600 和 PrefHeight 620 以及 MaxHeight 620文本换行设置为 true 我们将 JavaFX 8 与场景生成器一起使
  • 小时显示 hourSegments 角度日历

    在我的日历中 我需要显示一天和一周的时间 如下所示 09 00 09 15 09 20 我把包升级到最新了 angular calendar version 0 26 1 现在下面的代码出现错误 我无法再像以前一样显示时间 模块 ts cl
  • 复制并粘贴值而不是公式

    第一次编写宏 我必须仅将单元格值复制到另一个单元格值 并且我让它工作 但是 我不确定如何在不指定范围的情况下复制整个列 因为范围每次可能不同 在这里 我尝试使用一个有效的范围 但我希望它检查该列的单元格值 直到找到值复制 粘贴到另一列 这是
  • Vue.js / webpack 没有创建构建文件?

    这可能是一个愚蠢的问题 但到底是什么 我正在使用 vue cliwebpack simple模板 在该项目的 webpack 配置中我发现以下内容 output path path resolve dirname dist publicPa
  • 使“枚举时修改”集合成为线程安全的

    我想创建一个线程安全的集合 可以在枚举时进行修改 例子ActionSet类商店Action处理程序 它有Add方法将新的处理程序添加到列表中 并且Invoke枚举并调用所有收集的操作处理程序的方法 预期的工作场景包括非常频繁的枚举 并且在枚
  • Java dom4j org/jaxen/NamespaceContext 异常

    我已经下载了并将其添加到java的构建路径中 我也熟悉java lang NoClassDefFoundError org saxpath SAXPathException https stackoverflow com questions
  • 程序如何覆盖之前的输出行?

    程序如vim top or alsamixer输出多行文本并以某种方式操作已写入的文本行 我知道写 r字符到 stdout 这会将光标返回到行的开头 允许覆盖当前行 但不能覆盖之前的任何行 这些程序正在做什么才能拥有这些更高级的用户界面以及
  • 如何通过 DialogFragment 使用 startActivityForResult() ?

    我的应用程序需要添加用户名才能正常运行 mainActivity 在顶部显示从数据库检索的用户名 mainActivity 还有一个按钮 可通过 startActivityForResult 方法进入 addusername 活动 当用户实