Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema ao substituir startActivityForResult deprecated por novo padrão ActivityResultLauncher

Olá, tentei aplicar o startActivityForResult não funcionou, quando era inserido uma nova nota não aparecia na lista do RecyclerView, não sei se é por conta de estar deprecated e já fazer algum tempo da gravação, antes diziam que funcionava, então tentei aplicar o formato novo que consta na documentação que é o uso do ActivityResultLauncher, porém quando insiro uma nova nota não aparece na lista do RecyclerView também, poderia me ajudar por favor?

Activity da lista de notas

public class NoteListActivity extends AppCompatActivity {

    private NoteListAdapter adapter;
    private List<Notes> allNotes;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        allNotes = getNotes();
        configureRecyclerView(allNotes);

        ActivityResultLauncher<Intent> someActivityResultLauncher = registerForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                result -> {
                    if (result.getResultCode() == 2) {
                        Intent data = result.getData();
                        Notes receivedNote = (Notes) data.getSerializableExtra("note");
                        adapter.addNewNote(receivedNote);
                    }
                });

        TextView insertNoteButton = findViewById(R.id.insertNewNote);
        insertNoteButton.setOnClickListener(view -> {
            Intent renderNoteFormActivity = new Intent(this, NoteFormActivity.class);
            someActivityResultLauncher.launch(renderNoteFormActivity);
        });
    }

    @Override
    protected void onResume() {
        NoteDao dao = new NoteDao();
        allNotes.clear();
        allNotes.addAll(dao.getAllNotes());
        adapter.notifyDataSetChanged();
        super.onResume();
    }

    private void configureRecyclerView(List<Notes> allNotes) {
        RecyclerView notesList = findViewById(R.id.recycleView);
        configureAdapter(allNotes, notesList);
    }

    private void configureAdapter(List<Notes> allNotes, RecyclerView notesList) {
        adapter = new NoteListAdapter(this, allNotes);
        notesList.setAdapter(adapter);
    }

    private List<Notes> getNotes() {
        NoteDao dao = new NoteDao();
        dao.insertNote(new Notes("Primeira nota",
                "Primeira descrição"));
        return dao.getAllNotes();
    }
}

Activity do formulário

public class NoteFormActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_note_form);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.save_new_note_manu, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId() == R.id.save_new_note_menu){
            EditText title = findViewById(R.id.inputTitle);
            EditText description = findViewById(R.id.inputDescription);

            Notes createdNote = new Notes(title.getText().toString(),
                    description.getText().toString());

            Intent insertionResult = new Intent();
            insertionResult.putExtra("note", createdNote);
            setResult(2, insertionResult);

            finish();
        }
        return super.onOptionsItemSelected(item);
    }
}
1 resposta
solução!

Encontrei o problema, acabei esquecendo de remover o onResume do código, por isso não estava dando certo nem com o startActivityForResult deprecated e nem com o ActivityResultLauncher hahaha

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software