我有一个应用程序,它从数据库中检索数据并将其显示在列表视图中。我有一个自定义适配器。因此,当我按下“删除”按钮时,将显示列表中每行的删除按钮。如果我按下那个,特定行将被删除在DB中,同样也应该反映在列表视图中。问题是,它没有反映这种变化,我应该关闭应用程序并重新打开或进入其他一些活动并返回查看更新的结果。
所以我的问题是:我在哪里调用notifyDataSetChanged()
方法让它立即更新?
以下是我的惯常观点:
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
MenuListItems menuListItems = menuList.get(position);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) c
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.customlist, parent, false);
}
Button ck = (Button) convertView.findViewById(R.id.delbox);
if(i){
ck.setVisibility(View.VISIBLE);}
else{
ck.setVisibility(View.GONE);
}
ck.setTag(menuListItems.getSlno());
ck.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final Integer Index = Integer.parseInt((String) v.getTag());
final DataHandler enter = new DataHandler(c);
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
//Yes button clicked
enter.open();
enter.delet(Index);
enter.close();
notifyDataSetChanged();
dialog.dismiss();
break;
case DialogInterface.BUTTON_NEGATIVE:
//No button clicked
dialog.dismiss();
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(c);
builder.setMessage("Are you sure you want to Delete?").setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();
}
});
TextView id = (TextView) convertView.findViewById(R.id.tvhide);
id.setText(menuListItems.getSlno());
TextView title = (TextView) convertView.findViewById(R.id.tvtitle);
title.setText(menuListItems.getTitle());
TextView phone = (TextView) convertView.findViewById(R.id.tvpnumber);
phone.setText(menuListItems.getPhone());
// ck.setChecked(menuList.)
notifyDataSetChanged();
return convertView;
}
答案 0 :(得分:6)
您需要通过adapter.remove(adapter.getItem(position));
从列表视图的适配器中删除数据,然后在适配器上调用notifyDataSetChanged()
。
答案 1 :(得分:1)
您正在将某个显示ListView
的数据存储在列表中的某个位置(您在粘贴的代码中没有显示这些数据。更新您的问题会很好)
然后,当您从对话框中删除数据时,您将删除适配器用于显示ListView
的实际数据,但不会删除存储在列表中的数据。因此,您只需要从此列表中删除此数据,然后调用notifyDataSetChanged()
即可。
答案 2 :(得分:-1)
一个非常基本的解决方案是重新开始活动。
在“删除”按钮中单击侦听器,在删除记录后,重新启动活动。
现在它将获取最新数据!
Intent myIntent = new Intent(context,MainActivityName.class);
context.startActivity(myIntent);