【问题标题】:How to pass an intent back to MainActivity如何将意图传递回 MainActivity
【发布时间】:2019-05-31 10:06:56
【问题描述】:

我的应用在MainActivity 中有一个RecyclerView,带有一个onClickListener,它将一个意图发送到DetailActivityDetailActivity 有一个按钮可以返回而不做任何事情,还有一个按钮可以将意图发送到`Activity。 我已经检查了这里的其他帖子,例如 How to pass intent with extras to an already running 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);
        }
    });

【问题讨论】:

  • 使用setResult,startActivityForResultonActivityResult
  • @RissmonSuresh 我不能使用 recyclerViewAdapter 的 startActivityForResult
  • 你能指定你需要什么吗?就像 Activity 1 发送到 Activity 2 X 然后从 Activity2 接收它bla bla,有更多的细节?
  • Activity1 -> startActivityForResult, Activity2 -> setResult, Activity1 -> onActivityResult

标签: java android android-intent


【解决方案1】:
    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");          
         }

}

【讨论】:

    【解决方案2】:

    你可以使用 startActivityForResult(Intent intent,int requestcode);

    【讨论】:

    • 这是一个低质量的答案。为什么不向OP解释startActivityForResult的实现呢?
    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2021-02-10
    • 1970-01-01
    相关资源
    最近更新 更多