同一个 Android getIntent() 可以从两个不同的 类 接收吗?
Can the same Android getIntent() receive from two different classes?
问题:
当我尝试通过从第二个 activity 向其传递数据来“重用”所谓的具有额外值的 getIntent()
时,额外值 return 为空。所以我想将 NoteAdapter Intent Extras 传递给 ViewNote class 并且我还想使用相同的字符串键将 EditNote Intent Extras 传递给 ViewNote class。
是这样的:用户选择笔记 > 用户查看笔记 > 用户编辑笔记 > 用户查看笔记已更正。
什么有效:
根据用户对 RecyclerView
笔记列表的选择,通过 NoteAdapter
选择的笔记会将额外的详细信息传递给 Intent
到 ViewNote
class反过来有一个 Intent n = getIntent()
接收这些额外内容。备注详情载入ViewNote
activity。如果用户决定此注释需要更正或更新,则 ViewNote
class 有一个 Intent
将附加信息传递给 EditNote
class。这一切都很好!
什么不起作用以及我正在尝试做什么:
我不确定这是否被允许或可以完成,但我正在尝试将 extras 从 [=23= 传递回 ViewNote
class ] class 在 ViewNote
class 中使用相同的 Intent n = getIntent()
,当将注释传递给它时 class。
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);
我试过的:
我在这里阅读了一些关于 Whosebug 的帖子,它们看起来很相似,并尝试更改上下文(认为这可能是错误的),并尝试使用 Bundle
但这些都没有任何区别。我想也许 String
数组值没有传递,所以我只是传递了 String
变量,因为作为 String
的“ID”数字似乎可以正常传递,但其他值仍然 return null
。我已经阅读了一些 Android 开发人员关于 Intents 的解释,也许我只是没有完全理解 Intents,或者这可能无法完成或不应该如何完成。
我从事以下工作:
- Intellij 创意 2021.1.1
- Java Android v.28 最小值 v.29 最大值
- Gradle 4.1.2
解决方案正是 David Wasser 在上面的初始评论中发布的内容。我需要使用 startActivityForResult
并遵循有关如何操作的指南。我确实在网上查看了 Android 开发链接和其他示例,但这个视频很有帮助:
Android startActivityForResult Tutorial
这些是按顺序排列的代码段:
查看笔记
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");
}
}
}
问题:
当我尝试通过从第二个 activity 向其传递数据来“重用”所谓的具有额外值的 getIntent()
时,额外值 return 为空。所以我想将 NoteAdapter Intent Extras 传递给 ViewNote class 并且我还想使用相同的字符串键将 EditNote Intent Extras 传递给 ViewNote class。
是这样的:用户选择笔记 > 用户查看笔记 > 用户编辑笔记 > 用户查看笔记已更正。
什么有效:
根据用户对 RecyclerView
笔记列表的选择,通过 NoteAdapter
选择的笔记会将额外的详细信息传递给 Intent
到 ViewNote
class反过来有一个 Intent n = getIntent()
接收这些额外内容。备注详情载入ViewNote
activity。如果用户决定此注释需要更正或更新,则 ViewNote
class 有一个 Intent
将附加信息传递给 EditNote
class。这一切都很好!
什么不起作用以及我正在尝试做什么:
我不确定这是否被允许或可以完成,但我正在尝试将 extras 从 [=23= 传递回 ViewNote
class ] class 在 ViewNote
class 中使用相同的 Intent n = getIntent()
,当将注释传递给它时 class。
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);
我试过的:
我在这里阅读了一些关于 Whosebug 的帖子,它们看起来很相似,并尝试更改上下文(认为这可能是错误的),并尝试使用 Bundle
但这些都没有任何区别。我想也许 String
数组值没有传递,所以我只是传递了 String
变量,因为作为 String
的“ID”数字似乎可以正常传递,但其他值仍然 return null
。我已经阅读了一些 Android 开发人员关于 Intents 的解释,也许我只是没有完全理解 Intents,或者这可能无法完成或不应该如何完成。
我从事以下工作:
- Intellij 创意 2021.1.1
- Java Android v.28 最小值 v.29 最大值
- Gradle 4.1.2
解决方案正是 David Wasser 在上面的初始评论中发布的内容。我需要使用 startActivityForResult
并遵循有关如何操作的指南。我确实在网上查看了 Android 开发链接和其他示例,但这个视频很有帮助:
Android startActivityForResult Tutorial
这些是按顺序排列的代码段:
查看笔记
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");
}
}
}