Android - setResult not recognized

Asked

Viewed 52 times

0

Hello,

I have a screen with a list of "Profiles". When I click on one of these profiles goes to the register where I can update or delete this profile. When I update the profile and return to the listing screen onActivityResult fires normally, but when I delete the profile onActivityResult does not fire. The difference between one method and the other is that in the "delete" I first create a Dialog for the user to confirm, by clicking "Yes" he delete the profile, I do the setResult and then Finish, but as said before, does not enter onActivityResult from the previous screen.

Follows implementation:

Canvas - Listaperfilactivity

public class ListaPerfilActivity extends AppCompatActivity implements View.OnClickListener {

private Toolbar mToolbar;
private RecyclerView mRecyclerView;
private ArrayList<Perfil_PER> listaPerfil;
private PerfilAdapter perfilAdapter;
private FloatingActionButton fab;

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

    mToolbar = (Toolbar) findViewById(R.id.tb_main);

    atualizarLista();

    fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(this);
}

private static final int ACT_CADASTRO = 1;

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.fab:
            Intent it = new Intent(this, PerfilActivity.class);
            startActivityForResult(it, ACT_CADASTRO);
            break;
    }
}

@Override
protected void onActivityResult(int codigo, int resultado, Intent it) {
    if (codigo == ACT_CADASTRO) {
        if (resultado == RESULT_OK) {
            atualizarLista();
        }
    }
}

public void atualizarLista() {
    RepositorioPerfilScript repositorioPerfilScript = new RepositorioPerfilScript(this);
    listaPerfil = repositorioPerfilScript.listarPerfis();

    perfilAdapter = new PerfilAdapter(this, listaPerfil);

    mRecyclerView = (RecyclerView) findViewById(R.id.rv_list);
    mRecyclerView.setAdapter(perfilAdapter);
    mRecyclerView.setItemAnimator(new DefaultItemAnimator());
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    mRecyclerView.setHasFixedSize(true);
}}

Screen - Perfilactivity

public class PerfilActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener, View.OnClickListener {
ArrayList<Icones> listaIcones;

private EditText Nome;
private EditText Jogador;
private EditText Cronica;
private EditText Natureza;
private EditText Comportamento;
private EditText Cla;
private EditText Geracao;
private EditText Refugio;
private EditText Conceito;
ImageView imageView;
int selecionado;

Spinner spinner;

private long codigo;
private boolean inicio;

private MaterialDialog materialDialog;

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

    inicio = false;

    FloatingActionMenu fab = (FloatingActionMenu) findViewById(R.id.fab);
    fab.showMenuButton(true);
    fab.setClosedOnTouchOutside(true);

    FloatingActionButton fab1 = (FloatingActionButton) findViewById(R.id.fab1);
    FloatingActionButton fab2 = (FloatingActionButton) findViewById(R.id.fab2);

    fab1.setOnClickListener(this);
    fab2.setOnClickListener(this);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    listaIcones = new ArrayList<>();
    listaIcones.add(new Icones(R.drawable.icon_01));
    listaIcones.add(new Icones(R.drawable.icon_02));
    listaIcones.add(new Icones(R.drawable.icon_03));
    listaIcones.add(new Icones(R.drawable.icon_04));
    listaIcones.add(new Icones(R.drawable.icon_05));
    listaIcones.add(new Icones(R.drawable.icon_06));
    listaIcones.add(new Icones(R.drawable.icon_07));
    listaIcones.add(new Icones(R.drawable.icon_08));
    listaIcones.add(new Icones(R.drawable.icon_09));
    listaIcones.add(new Icones(R.drawable.icon_10));

    spinner = (Spinner) findViewById(R.id.spImage);
    SpinnerIconePerfilAdapter spinnerIconePerfilAdapter = new SpinnerIconePerfilAdapter(this, R.layout.spinner_icone_perfil, listaIcones);
    spinner.setAdapter(spinnerIconePerfilAdapter);
    spinner.setOnItemSelectedListener(this);

    ValidateUtil vu = new ValidateUtil();

    Nome = (EditText) findViewById(R.id.edNome);
    Jogador = (EditText) findViewById(R.id.edJogador);
    Cronica = (EditText) findViewById(R.id.edCronica);
    Natureza = (EditText) findViewById(R.id.edNatureza);
    Comportamento = (EditText) findViewById(R.id.edComportamento);
    Cla = (EditText) findViewById(R.id.edCla);
    Geracao = (EditText) findViewById(R.id.edGeracao);
    Refugio = (EditText) findViewById(R.id.edRefugio);
    Conceito = (EditText) findViewById(R.id.edConceito);

    Nome.addTextChangedListener(vu);
    Jogador.addTextChangedListener(vu);
    Cronica.addTextChangedListener(vu);
    Natureza.addTextChangedListener(vu);
    Comportamento.addTextChangedListener(vu);
    Cla.addTextChangedListener(vu);

    imageView = (ImageView) findViewById(R.id.imageView);

    Intent it = getIntent();
    if (it != null) {
        inicio = true;
        Bundle params = it.getExtras();
        if (params != null) {
            codigo = params.getLong("codigo_perfil");
            String msg = "Codigo: " + codigo;
            Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
            preencheCampos();
        }
    }
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    //spinner.setIn
    if (!inicio) {
        imageView.setImageResource(listaIcones.get(position).getImageId());
        selecionado = position;
    }
    inicio = false;
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}

@Override
public void onClick(View v) {
    String aux = "";

    switch( v.getId() ){
        case R.id.fab1:
            salvarPerfil();
            //TODO: Deve encaminhar para ficha
            break;
        case R.id.fab2:
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Apagar Perfil");
            builder.setMessage("Deseja cancelar o perfil?");
            builder.setCancelable(true);
            builder.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    apagarPerfil();
                }
            });

            builder.setNegativeButton("Não", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                }
            });
            AlertDialog dialog = builder.create();
            dialog.show();
            break;
    }

}

private void salvarPerfil() {
    Perfil_PER perfil;
    RepositorioPerfilScript repositorioPerfilScript = new RepositorioPerfilScript(this);

    if (codigo == 0) {
        perfil = new Perfil_PER();

        perfil.setPER_NOME(((EditText) findViewById(R.id.edNome)).getText().toString());
        perfil.setPER_JOGADOR(((EditText) findViewById(R.id.edJogador)).getText().toString());
        perfil.setPER_CRONICA(((EditText) findViewById(R.id.edCronica)).getText().toString());
        perfil.setPER_NATUREZA(((EditText) findViewById(R.id.edNatureza)).getText().toString());
        perfil.setPER_COMPORTAMENTO(((EditText) findViewById(R.id.edComportamento)).getText().toString());
        perfil.setPER_CLA(((EditText) findViewById(R.id.edCla)).getText().toString());
        perfil.setPER_GERACAO(((EditText) findViewById(R.id.edGeracao)).getText().toString());
        perfil.setPER_REFUGIO(((EditText) findViewById(R.id.edRefugio)).getText().toString());
        perfil.setPER_CONCEITO(((EditText) findViewById(R.id.edConceito)).getText().toString());
        perfil.setPER_DATA_CADASTRO(Calendar.getInstance().getTime());

        perfil.setPER_PHOTO(listaIcones.get(selecionado).getImageId());
    } else {
        perfil = repositorioPerfilScript.buscarPerfil(codigo);
    }

    if (validateFields(perfil)) {
        repositorioPerfilScript.salvar(perfil);
        setResult(RESULT_OK);
        finish();
    }
}

private void apagarPerfil() {
    RepositorioPerfilScript repositorioPerfilScript = new RepositorioPerfilScript(this);
    repositorioPerfilScript.deletar(codigo);

    setResult(RESULT_OK);
    finish();

}

private boolean validateFields(Perfil_PER perfil) {
    if (TextUtils.isEmpty(perfil.getPER_NOME())) {
        Nome.requestFocus();
        Nome.setError("Nome é obrigatório!");
        //Nome.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (!(perfil.getPER_NOME().length() > 3)) {
        Nome.requestFocus();
        Nome.setError("Nome deve ter mais que 3 letras!");
        //Nome.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (TextUtils.isEmpty(perfil.getPER_JOGADOR())) {
        Jogador.requestFocus();
        Jogador.setError("Jogador é obrigatório!");
        //Jogador.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (!(perfil.getPER_JOGADOR().length() > 3)) {
        Jogador.requestFocus();
        Jogador.setError("Jogador deve ter mais que 3 letras!");
        //Jogador.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (TextUtils.isEmpty(perfil.getPER_CRONICA())) {
        Cronica.requestFocus();
        Cronica.setError("Crônica é obrigatório!");
        //Jogador.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (!(perfil.getPER_CRONICA().length() > 3)) {
        Cronica.requestFocus();
        Cronica.setError("Crônica deve ter mais que 3 letras!");
        //Jogador.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (TextUtils.isEmpty(perfil.getPER_NATUREZA())) {
        Natureza.requestFocus();
        Natureza.setError("Natureza é obrigatório!");
        //Jogador.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (!(perfil.getPER_NATUREZA().length() > 3)) {
        Natureza.requestFocus();
        Natureza.setError("Natureza deve ter mais que 3 letras!");
        //Jogador.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (TextUtils.isEmpty(perfil.getPER_COMPORTAMENTO())) {
        Comportamento.requestFocus();
        Comportamento.setError("Comportamento é obrigatório!");
        //Jogador.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (!(perfil.getPER_COMPORTAMENTO().length() > 3)) {
        Comportamento.requestFocus();
        Comportamento.setError("Comportamento deve ter mais que 3 letras!");
        //Jogador.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (TextUtils.isEmpty(perfil.getPER_CLA())) {
        Cla.requestFocus();
        Cla.setError("Clã é obrigatório!");
        //Jogador.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (!(perfil.getPER_CLA().length() > 3)) {
        Cla.requestFocus();
        Cla.setError("Clã deve ter mais que 3 letras!");
        //Jogador.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (TextUtils.isEmpty(perfil.getPER_GERACAO())) {
        Geracao.requestFocus();
        Geracao.setError("Geração é obrigatório!");
        //Jogador.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    } else if (!(perfil.getPER_GERACAO().length() > 3)) {
        Geracao.requestFocus();
        Geracao.setError("Geração deve ter mais que 3 letras!");
        //Jogador.setError(resources.getString(R.string.login_user_required)); - Precisa criar no arquivo de Strings
        return false;
    }

    return true;
}

private void preencheCampos() {
    RepositorioPerfilScript repositorioPerfilScript = new RepositorioPerfilScript(this);
    Perfil_PER perfil = repositorioPerfilScript.buscarPerfil(codigo);

    if (perfil != null) {
        //Nome
        Nome.setText(perfil.getPER_NOME());
        //Jogador
        Jogador.setText(perfil.getPER_JOGADOR());
        //Cronica
        Cronica.setText(perfil.getPER_CRONICA());
        //Natureza
        Natureza.setText(perfil.getPER_NATUREZA());
        //Comportamento
        Comportamento.setText(perfil.getPER_COMPORTAMENTO());
        //Cla
        Cla.setText(perfil.getPER_CLA());
        //Geracao
        Geracao.setText(perfil.getPER_GERACAO());
        //Refugio
        Refugio.setText(perfil.getPER_REFUGIO());
        //Conceito
        Conceito.setText(perfil.getPER_CONCEITO());
        //Photo -  imageView.setImageResource(listaIcones.get(position).getImageId());
        imageView.setImageResource(perfil.getPER_PHOTO());
    }

}}

Someone would know how to fix such a problem?

  • You’ve already seen that you don’t really go into onActivityResult()? If not, another possibility is that repositorioPerfilScript.deletar(codigo) did not make any changes to the profile list, it is not?

  • Hello Dan. Yes, I checked onActivityResult(). When I use the save method it records the changes, closes Activity and updates the list on the previous screen. In delete, it records the deletion of the record normally, terminates Activity but does not trigger the method to update the list (i.e., it does not enter onActivityResult()). So much so that if I exit the application and re-enter the list is updated (with the record deleted). As in onClick.

  • Very strange. There’s nothing wrong, it should work. Have you tried taking out the dialog and calling delete profile directly to see if the result is the same?

  • Hello @Rodrigohenriques, I haven’t done this test yet, but I believe it will work, but I need the Dialog so that the user does not delete the profile by accident.

  • Do this test and tell us the result.

  • Hello @Rodrigohenriques. I managed to solve it in another way. I put the update of the screen data onResume(), so I do not need to send a reply (setResult()). This way the data is updated regardless of what operation I have done on the CRUD screen. Thank you for your attention.

  • No problem. I’m glad you solved it. Hug.

Show 2 more comments
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.