java - 如何将意图传递回 MainActivity
问题描述
我的应用程序中有一个RecyclerView
带有MainActivity
onClickListener 的 onClickListener,它向DetailActivity
. 有DetailActivity
一个按钮可以返回而不做任何事情,还有一个按钮可以将意图发送到`Activity。我已经在这里查看了其他帖子,例如如何将带有附加功能的意图传递给已经运行的活动 和其他帖子,但没有一个结果。
这是我尝试过的一个版本:
主要活动:
@Override
protected void onNewIntent(Intent intent) {
int codPedido = getIntent().getIntExtra("CodPedido",1);
//Toast to test if it's working
Toast.makeText(getApplicationContext(), String.valueOf(codPedido), Toast.LENGTH_SHORT).show();
}
RecyclerViewAdapter 的 OnClick:
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("CodigoPedido", pedidos.get(i).getCodPedido());
intent.putExtra("Local", pedidos.get(i).getLocal());
intent.putExtra("Dia",pedidos.get(i).getDia());
intent.putExtra("Periodo", pedidos.get(i).getPeriodo());
intent.putExtra("urgente", pedidos.get(i).isUrgente());
intent.putExtra("requisitante",pedidos.get(i).getRequisitante());
intent.putExtra("observacoes", pedidos.get(i).getObservacoes());
详细活动:
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_confirm) {
Intent intent = new Intent(DetailActivity.this, MainActivity.class);
intent.putExtra("CodPedido", codPedido);
startActivityForResult(intent, 1);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
编辑:
这是我现在尝试的:
viewHolder.clRow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity mActivity = new MainActivity();
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("CodigoPedido", pedidos.get(i).getCodPedido());
intent.putExtra("Local", pedidos.get(i).getLocal());
intent.putExtra("Dia",pedidos.get(i).getDia());
intent.putExtra("Periodo", pedidos.get(i).getPeriodo());
intent.putExtra("urgente", pedidos.get(i).isUrgente());
intent.putExtra("requisitante",pedidos.get(i).getRequisitante());
intent.putExtra("observacoes", pedidos.get(i).getObservacoes());
mActivity.startActivityForResult(intent, 1);
}
});
它给了method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
我之前所做的是使用构造函数中的上下文
public RvPedidosAdapter(List<Pedido> pedidos, Context context) {
this.pedidos = pedidos;
this.context = context;
}
像这样:
viewHolder.clRow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("CodigoPedido", pedidos.get(i).getCodPedido());
intent.putExtra("Local", pedidos.get(i).getLocal());
intent.putExtra("Dia",pedidos.get(i).getDia());
intent.putExtra("Periodo", pedidos.get(i).getPeriodo());
intent.putExtra("urgente", pedidos.get(i).isUrgente());
intent.putExtra("requisitante",pedidos.get(i).getRequisitante());
intent.putExtra("observacoes", pedidos.get(i).getObservacoes());
context.startActivity(intent);
}
});
解决方案
On Your code please pass startActivityForResult() with intent param with result code and get the result on MainActivity in onActivityResult();
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("CodigoPedido", pedidos.get(i).getCodPedido());
intent.putExtra("Local", pedidos.get(i).getLocal());
intent.putExtra("Dia",pedidos.get(i).getDia());
intent.putExtra("Periodo", pedidos.get(i).getPeriodo());
intent.putExtra("urgente", pedidos.get(i).isUrgente());
intent.putExtra("requisitante",pedidos.get(i).getRequisitante());
intent.putExtra("observacoes", pedidos.get(i).getObservacoes());
startActivityForResult(intent, 1);
On your second activity please use this code.
Intent intent = new Intent(DetailActivity.this, MainActivity.class);
intent.putExtra("CodPedido", codPedido);
setResult(RESULT_OK, intent);
finish();
并移动到您的 MainActivity.class 以在 onActivityResult() 方法中获取结果数据,如下所示。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK){
(data.getIntExtra("CodPedido");
}
}
推荐阅读
- python - 始终使用随机种子选择相同的图像
- apache-spark - spark.table vs sql() AccessControlException
- android - 收到firebase通知时,即使应用程序处于后台,如何打开活动
- javascript - 如何通过道具将值传递给另一个组件和错误:`使用默认值或值道具而不是设置选择
- r - 如何恢复 R 脚本?
- javascript - Add dot notation to React.createElement
- python - 将列中的 NaN 值替换为该列中特定类别的模式
- r - 我有一个 qplots 的 for 循环,如何使用 LaTeX 代码单独构建图,例如为图添加标题
- android - 使用 2 个单选组创建自定义对话框首选项
- c# - 在 WebAPI 方法输入 Dto 中使用 Enum 属性