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 thatrepositorioPerfilScript.deletar(codigo)
did not make any changes to the profile list, it is not?– Dan Getz
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.
– Daybson
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?
– Rodrigo Henriques
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.
– Daybson
Do this test and tell us the result.
– Rodrigo Henriques
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.
– Daybson
No problem. I’m glad you solved it. Hug.
– Rodrigo Henriques