繁体   English   中英

同一个 Android getIntent() 可以从两个不同的类接收吗?

[英]Can the same Android getIntent() receive from two different classes?

问题:当我尝试通过将数据从第二个活动传递给它来“重用”带有额外值的getIntent()时,额外的值返回 null。 因此,我想将 NoteAdapter Intent Extras 传递给 ViewNote class,并且我还想使用相同的字符串键将 EditNote Intent Extras 传递给 ViewNote class。

像这样:用户选择注释 > 用户视图注释 > 用户编辑注释 > 用户视图注释已更正。

工作原理:根据用户对RecyclerView笔记列表的选择,通过NoteAdapter选择的笔记有额外的详细信息传递给ViewNote class 的Intent ,而 ViewNote class 又具有Intent n = getIntent() ,这些额外信息被接收。 注释详细信息被加载到ViewNote活动中。 如果用户决定需要更正或更新此注释,则ViewNote class 有一个Intent将额外内容传递给EditNote class。 这一切都很好!

什么不起作用,我正在尝试做什么:我不确定这是否允许或可以完成,但我正在ViewNote EditNote相同的Intent Intent n = getIntent()将注释传递给之前使用的ViewNote class 中的Intent n = getIntent()

ViewNote class getIntent()

Intent n = getIntent();
nNoteID = n.getIntExtra("ID", 0);
String nType = n.getStringExtra("Type");
String nSummary = n.getStringExtra("Summary");
String nSource = n.getStringExtra("Source");
String nAuthors = n.getStringExtra("Authors");

EditNote Intent将额外内容传递回 ViewNote

Intent u = new Intent(EditNote.this, ViewNote.class);
u.putExtra("ID", vNoteID);
u.putExtra("Type", ty);
u.putExtra("Summary", su);
u.putExtra("Source", so);
u.putExtra("Authors",au);
EditNote.this.startActivity(u);

我已经尝试过:我在 stackoverflow 上阅读了一些看起来相似的帖子,并尝试更改上下文(认为这可能是错误的),并尝试使用Bundle ,但这些都没有任何区别。 我想也许String数组值没有通过,所以我只是传递了String变量,因为作为String的“ID”数字似乎可以通过,但其他值仍然返回null 我已经阅读了一些 Android 开发人员关于 Intent 的解释,也许我只是不完全理解 Intent,或者这只是无法完成或不应该如何完成。

我正在从事以下工作:

  • Intellij 理念 2021.1.1
  • Java Android v.28 最小值 v.29 最大值
  • Gradle 4.1.2

解决方案正是 David Wasser 在上面最初的评论中发布的。 我需要使用startActivityForResult并遵循有关如何操作的指南。 我确实在线查看了 Android 开发链接和其他示例,但此视频有所帮助:

Android startActivityForResult 教程

这些是按顺序排列的代码段:

查看笔记

menuIntent = new Intent(this, EditNote.class);
menuIntent.putExtra("NoteID", nNoteID);
menuIntent.putExtra("NoteDetails", new ArrayList<>(noteDetails));
if(noteFiles.size() > 0)
    menuIntent.putParcelableArrayListExtra("NoteFiles", new ArrayList<>(noteFiles));
startActivityForResult(menuIntent, REQUEST_CODE);  // REQUEST_CODE = 1

编辑笔记

Intent u = new Intent();
        u.putExtra("ID", vNoteID);
        u.putExtra("Type", ty);
        u.putExtra("Summary", su);
        u.putExtra("Source", so);
        u.putExtra("Authors",au);
        setResult(RESULT_OK,u);
        finish();

返回 ViewNote onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == REQUEST_CODE){
        if(resultCode == RESULT_OK) {
            nNoteID = data.getIntExtra("ID", 0);
            nType = data.getStringExtra("Type");
            nSummary = data.getStringExtra("Summary");
            nSource = data.getStringExtra("Source");
            nAuthors = data.getStringExtra("Authors");
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM