Как передать намерение обратно в MainActivity - PullRequest
0 голосов
/ 31 мая 2019

Мое приложение имеет RecyclerView в MainActivity с onClickListener, который отправляет намерение на DetailActivity. У DetailActivity есть кнопка для возврата без каких-либо действий и кнопка для отправки намерения в «Activity». Я уже проверил здесь другие сообщения, такие как Как передать намерение с дополнениями в уже запущенное действие и другие, но ничего не получается.

Вот версия, которую я попробовал:

MainActivity:

@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();
}

OnClick of RecyclerViewAdapter:

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());

DetailActivity:

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);
    }

Edit:

Вот что я попробовал сейчас:

    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);
        }
    });

Ответы [ 2 ]

0 голосов
/ 31 мая 2019
    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");          
         }

}
0 голосов
/ 31 мая 2019

вы можете использовать startActivityForResult(Intent intent,int requestcode);

см. Этот пост -> startActivityForResult

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...