gpt4 book ai didi

android - 关于使用 Intent 传递数据的问题

转载 作者:行者123 更新时间:2023-11-29 02:17:12 24 4
gpt4 key购买 nike

我正在尝试修改 Notepad 教程(Notepadv3 解决方案)以将值输入 NoteEdit 类,该值由 Notepadv3 类提供。我已经成功地在 OnListItemClick 方法中使用 .putExtra 将值放入 NoteEdit 类中,但是我正在努力为 createNote 方法执行此操作;当我尝试创建新笔记时,我遇到了强制关闭。

我敢打赌有一个简单的解决方案,但我是 Java 和 Android 的新手,非常感谢您的帮助。

这是 Notepadv3 类中有问题的代码:

private void createNote() {
Intent i = new Intent(this, NoteEdit.class);
i.putExtra("key", 1);
startActivityForResult(i, ACTIVITY_CREATE);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Intent i = new Intent(this, NoteEdit.class);
i.putExtra(NotesDbAdapter.KEY_ROWID, id);
i.putExtra("key", 1);
startActivityForResult(i, ACTIVITY_EDIT);
}

@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
fillData();
}

下面是 NoteEdit 类中的接收代码:

mRowId = savedInstanceState != null ? savedInstanceState.getLong(NotesDbAdapter.KEY_ROWID) 
: null;
if (mRowId == null) {
Bundle extras = getIntent().getExtras();
mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID)
: null;
value = extras.getInt("key");

}

我相当确定当我使用 createNote 方法时 (mRowId == null) 不是真的,因此不会调用 getExtras。我的问题之一是当我使用 createNote 方法时如何让我的 NoteEdit 类获得这个值?如果这对你们所有人来说都是一个简单的问题,我很抱歉。

谢谢,

最佳答案

当使用Intent 启动另一个 Activity 时,接收 Activity 必须使用getIntent() 方法来访问它;没有理由为此目的使用 savedInstanceState;这仅在“恢复” Activity 的当前状态时有用,因为它已被中断。

您可以在发送 Activity 中使用Intent 的“extras”来传输您要发送的数据。接收 Activity 使用相同的额外名称来获取数据。此外,永远不要假设所有的额外内容都已发送(即检查 null!)

您应该在接收 Activity 的 onCreate 方法中做出有关 Activity 操作的所有决定。

如果可以通过多种方式“启动” Activity ,则必须在 Intent 中使用 Intent.setAction() 并在接收 Activity 中检查所有有效操作.

此外,不要依赖 onListItemClick 中的 id 参数,它通常是不正确的。 position 参数始终是正确的,您可以使用它从适配器获取实际项目,并从项目中获取 ID。通常,设置 Intent 的数据 URI 而不是额外发送 ID;这与系统的 Activity 分辨率(见下文)一起使用效果更好。

事实上,“数据操作” Activity 应该支持数据编辑、INSERTEDIT 等标准操作,并具有指定这些操作和操作的 Intent 过滤器您数据的 MIME 类型。我很确定这些是示例应用程序的一部分。

在接收 Activity 中,您必须调用 Activity.setResult(),并且您通常通过另一个 Intent 发回返回数据(例如新内容 URL),您然后从 onActivityResult() 中的发送 Activity 访问。此外,您必须在适当的时候调用setResult();例如在生命周期退出期间调用它(onPause()onStop())为时已晚,并且不会传回您的结果。

关于android - 关于使用 Intent 传递数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2667324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com