5
When I click on an item of mine Listview, i open a dialog with 3 buttons (Edit, Finish and Delete).
By clicking delete, I would like to make the Listview be updated.
Man Adapter is in a separate class and requires that after deleting a record in the database the list is updated.
I’ve used the method notifyDataSetChanged()
, but it’s not working.
Below is the main class where the Listview and also the class Adapter.
public class FragmentHome extends BaseFragment {
private Context mContext;
public ListView lvAtvidades;
private View mView;
private LinearLayout llmenupopup;
private ArrayList<HMAux> data;
private CustomAtividadeAdapter adapter_atividades;
private int usuarioID;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Setando a View com o layout do Fragment
mView = inflater.inflate(R.layout.fragment_home, null);
//Métodos padrão
inicializaVariavel();
inicializaAcao();
//Retornando a View
return mView;
}
//Método responsável por inicializar todos os componentes
private void inicializaVariavel() {
mContext = getContext();
lvAtvidades = (ListView) mView.findViewById(R.id.fragment_home_lvAtividades);
}
//Método responsável pelas ações do Fragment
private void inicializaAcao() {
//Origem da informação, buscando os dados da Classe HMAux
String[] from = {HMAux.TEXTO_1, HMAux.TEXTO_2, HMAux.TEXTO_3};
//Representação aonde os dados serão exibidos
int[] to = {R.id.item_atividade_iv_icone, R.id.item_atividade_tv_titulo, R.id.item_atividade_tv_descricao};
//Chama o método que busca os dados
buscaListaAtividades();
//
adapter_atividades = new CustomAtividadeAdapter(mContext, R.layout.item_atividade, data);
lvAtvidades.setAdapter(adapter_atividades);
llmenupopup = (LinearLayout) mView.findViewById(R.id.item_atividade_ll_menu);
}
//Método responsável por buscar os dados
private void buscaListaAtividades() {
//Buscando o ID do usuário do Shared Preferences
SharedPreferences mSharedPreferences = this.getActivity().getSharedPreferences(Constantes.PREFS, Context.MODE_PRIVATE);
usuarioID = mSharedPreferences.getInt(Constantes.CODIGO, -1);
//Inicializando e chamando o método que retorna a lista de atividades
AtividadeDao mAtividadeDao = new AtividadeDao(mContext);
data = mAtividadeDao.obterlistaAtividades(usuarioID, 2, 1);
}
@Override
public void onStart() {
super.onStart();
//Chama o método para inicializar novamente as variaveis
inicializaVariavel();
inicializaAcao();
}
@Override
public void onResume() {
super.onResume();
//Origem da informação, buscando os dados da Classe HMAux
String[] from = {HMAux.TEXTO_1, HMAux.TEXTO_2, HMAux.TEXTO_3};
//Representação aonde os dados serão exibidos
int[] to = {R.id.item_atividade_iv_icone, R.id.item_atividade_tv_titulo, R.id.item_atividade_tv_descricao};
//Chama o método que busca os dados
buscaListaAtividades();
//
adapter_atividades = new CustomAtividadeAdapter(mContext, R.layout.item_atividade, data);
lvAtvidades.setAdapter(adapter_atividades);
llmenupopup = (LinearLayout) mView.findViewById(R.id.item_atividade_ll_menu);
}
}
Adapter:
public class CustomAtividadeAdapter extends BaseAdapter {
private LayoutInflater inflater;
private ArrayList<HMAux> data;
private int resource;
private LinearLayout llmenupopup;
private ImageView ivMenupopup;
private Context mContext;
//
public CustomAtividadeAdapter(Context context, int resource, ArrayList<HMAux> data){
this.data = data;
this.resource = resource;
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
HMAux item = data.get(position);
return Long.parseLong(item.get(HMAux.ID));
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(resource, parent, false);
}
//Grava o context do aplicativo
mContext = convertView.getContext();
//Inicializando os componentes da item_atividade.xml
ImageView ivIcone = (ImageView) convertView.findViewById(R.id.item_atividade_iv_icone);
final TextView tvID = (TextView) convertView.findViewById(R.id.item_atividade_tv_id);
TextView tvNome = (TextView) convertView.findViewById(R.id.item_atividade_tv_titulo);
TextView tvDetalhes = (TextView) convertView.findViewById(R.id.item_atividade_tv_descricao);
//
HMAux item = data.get(position);
//
//ivIcone.setImageResource(R.drawable.ic_menu_camera);
tvID.setText(item.get(HMAux.ID));
tvNome.setText(item.get(HMAux.TEXTO_1));
tvDetalhes.setText(item.get(HMAux.TEXTO_2));
//Inicializa os componentes de click
llmenupopup = (LinearLayout) convertView.findViewById(R.id.item_atividade_ll_menu);
ivMenupopup = (ImageView) convertView.findViewById(R.id.item_atividade_iv_menupopup);
//Método de click do popup da listwiew
llmenupopup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Menu popup
ivMenupopup.setImageResource(R.drawable.ic_menupopup);
final PopupMenu mPopupMenu = new PopupMenu(mContext, v);
mPopupMenu.setGravity(Gravity.RIGHT);
mPopupMenu.getMenuInflater().inflate(R.menu.list_atividades, mPopupMenu.getMenu());
//Customização da opção Editar do List Atividades
MenuItem mMenuItemEditar = mPopupMenu.getMenu().getItem(0);
SpannableString spannableEdit = new SpannableString(mMenuItemEditar.getTitle());
spannableEdit.setSpan(new ForegroundColorSpan(mContext.getResources().getColor(R.color.Preto)), 0, spannableEdit.length(), 0);
mMenuItemEditar.setTitle(spannableEdit);
//Customização da opção Finalizar do List Atividades
MenuItem mMenuItemFinalizar = mPopupMenu.getMenu().getItem(1);
SpannableString spannableFinalizar = new SpannableString(mMenuItemFinalizar.getTitle());
spannableFinalizar.setSpan(new ForegroundColorSpan(mContext.getResources().getColor(R.color.Preto)), 0, spannableFinalizar.length(), 0);
mMenuItemFinalizar.setTitle(spannableFinalizar);
//Customização da opção Excluir do List Atividades
MenuItem mMenuItemExcluir = mPopupMenu.getMenu().getItem(2);
SpannableString spannableExcluir = new SpannableString(mMenuItemExcluir.getTitle());
spannableExcluir.setSpan(new ForegroundColorSpan(mContext.getResources().getColor(R.color.Preto)), 0, spannableExcluir.length(), 0);
mMenuItemExcluir.setTitle(spannableExcluir);
//Métodos das opções do popoup menu
mPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.list_atividades_editar:
//Cria e inicializa Activity TelaEditarAtividade.class
Intent mIntent = new Intent(mContext, TelaEditarAtividade.class);
mIntent.putExtra(Constantes.TIPO, 1);
mIntent.putExtra(Constantes.VALOR, Integer.valueOf(tvID.getText().toString()));
mContext.startActivity(mIntent);
break;
case R.id.list_atividades_finalizar:
//Cria e inicializa objeto Atividade
Atividade mAtividade = new Atividade();
mAtividade.setCodigo(Integer.valueOf(tvID.getText().toString().trim()));
mAtividade.setConcluida(true);
mAtividade.setCodigo_statusatividade(2);
//Executa atualização do banco de dados
AtividadeDao mAtividadeDao = new AtividadeDao(mContext);
mAtividadeDao.finalizarAtividade(mAtividade);
notifyDataSetChanged();
break;
case R.id.list_atividades_excluir:
//Criando e inicializando Alert Dialog
AlertDialog.Builder mAlerBuilder = new AlertDialog.Builder(mContext);
mAlerBuilder.setTitle(null);
mAlerBuilder.setMessage("Caro usuário você realmente deseja excluir essa atividade?");
mAlerBuilder.setCancelable(false);
//Método do botão negativo do Alert Dialog
mAlerBuilder.setNegativeButton("CANCELAR", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
dialog.dismiss();
}
});
//Método do botão positivo do Alert Dialog
mAlerBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Cria e inicializa objeto atividade com os dados que sera deletado
Atividade mAtividade = new Atividade();
mAtividade.setCodigo(Integer.valueOf(tvID.getText().toString()));
mAtividade.setExcluida(true);
mAtividade.setCodigo_statusatividade(3);
//Delete atividade
AtividadeDao mAtividadeDao = new AtividadeDao(mContext);
mAtividadeDao.apagarAtividade(mAtividade);
//Aqui deve ser atualizado a ListView
notifyDataSetChanged();
}
});
//Demonstra mensagem Alert Dialog
mAlerBuilder.show();
break;
default:
break;
}
return false;
}
});
//Inicializa Poupop
mPopupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() {
@Override
public void onDismiss(PopupMenu menu) {
ivMenupopup.setImageResource(R.drawable.ic_menupopup);
}
});
//Demonstra Menu Popup
mPopupMenu.show();
}
});
//
return convertView;
}
}
Hello Ramaral, thank you for returning the element date is not in the Customisadeadapter class so I can not use either of the two solutions.
– dnsfirmino
What do you mean, it’s not?
– ramaral
Sorry Ramaral said nonsense, thanks for the help worked correctly.
– dnsfirmino