onActivityResult() 在 Android 上不起作用
Posted
技术标签:
【中文标题】onActivityResult() 在 Android 上不起作用【英文标题】:onActivityResult() not working on Android 【发布时间】:2021-10-05 13:15:02 【问题描述】:我正在尝试使用 onActivityResult 发送标题,我已经查看了同一任务的 google 实现,但它对我不起作用。有人可以帮忙吗?
mainActivity 中 onActivityResult 的代码。
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
System.out.println("There is something coming to this function" + requestCode);
if(requestCode == NEW_TITLE_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK)
Title title = new Title(data.getStringExtra(notesSection.EXTRA_REPLY));
mTitleViewModel.insert(title);
else
Toast.makeText(getApplicationContext(), R.string.empty_not_saved, Toast.LENGTH_LONG).show();
我的 notesSection 活动中的代码。
finishFab.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
// System.out.println("Button Has Been Clicked From Notes Section");
Intent replyIntent = new Intent();
if (TextUtils.isEmpty(titleEdit.getText()))
// System.out.println("Empty?");
setResult(RESULT_CANCELED, replyIntent);
else
// System.out.println("Sending Something Supposedly");
String title = titleEdit.getText().toString();
// System.out.println("Sending " + title);
replyIntent.putExtra(EXTRA_REPLY, title);
setResult(RESULT_OK, replyIntent);
finish();
// startActivity(new Intent(notesSection.this, MainActivity.class));
);
仅供参考:当我在 onActivityResult 函数中打印某些内容时,我的运行终端上没有显示任何内容,我不知道这是为什么,但我认为由于某种原因无法访问该函数。如有必要,我将发送更多代码。 谢谢。
【问题讨论】:
你是如何从第一个活动开始的? @HenryTwist 感谢您的评论,但下面的评论帮助我解决了这个问题。我是用 start Activity 而不是 startactivity 来启动它的 是的,我认为会是这样。但是,我强烈建议您注意@Eishon 的答案,因为您使用的方法已被弃用。 @HenryTwist 谢谢我会的! 【参考方案1】:在您的第一个活动中尝试像这样开始第二个活动
static int NEW_TITLE_ACTIVITY_REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState)
---
---
---
// i assume you are starting activity on some button click
// so add following line in you button on click event
startActivityForResult(new Intent(MainActivity.this,notesSection.class),NEW_TITLE_ACTIVITY_REQUEST_CODE);
然后在您的第一个活动中覆盖以下方法
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
if (resultCode == Activity.RESULT_OK && requestCode == NEW_TITLE_ACTIVITY_REQUEST_CODE)
// do whatever you want
同时在点击监听器上更新你的完成工厂
finishFab.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent replyIntent = new Intent();
if (TextUtils.isEmpty(titleEdit.getText()))
setResult(RESULT_CANCELED, replyIntent);
else
replyIntent.putExtra("TITLE", titleEdit.getText().toString());
setResult(RESULT_OK, replyIntent);
finish();
);
【讨论】:
谢谢,我的问题是我用 startActivity 而不是 startActivityForResult 调用第二个活动。【参考方案2】:实际上,这个程序最近发生了变化。您可能想看看official documentation,以便您可以根据需要实现它。
【讨论】:
谢谢,但下面的评论帮助解决了我的问题。以上是关于onActivityResult() 在 Android 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 onActivityResult 中调用 startActivityForResult?
关于片段生命周期,何时调用片段的 onActivityResult?