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