활동 확장 활동이 있습니다.이 활동에는 SQlite 데이터베이스에서 쿼리 한 데이터를 표시하는 listview가 있습니다. listview의 항목 중 하나를 longclick하면 alertdialog가 표시되어 정말로 삭제하고 싶은지 확인합니다. 그러나 데이터 중 하나를 삭제하면 데이터베이스에서 데이터를 다시 쿼리하고 목록보기 새로 고침을 위해 notifyDataSetChanged()
을 사용하지만 작동하지 않습니다. 에서 onCreate에서 몇 가지 코드()Adapter.notifyDataSetChanged()가 작동하지 않습니다.
serviceListView.setOnItemLongClickListener(new OnItemLongClickListener()
{
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,final int arg2, long arg3)
{
Map<String, String> map = new HashMap<String, String>();
if (data!=null)
{
String[] options = new String[]{ "edit", "delete" };
map = data.get(arg2);
final String companyname= map.get("companyname");
final String serviceaddress = map.get("serveraddress");
final String id = map.get("id");
new AlertDialog.Builder(ServiceListActivity.this)
.setTitle("options")
.setIcon(android.R.drawable.ic_dialog_info)
.setSingleChoiceItems(options,-1,
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog,int which)
{
if (which == 0)
{
dialog.dismiss();
Toast.makeText(ServiceListActivity.this, id+companyname+serviceaddress+"edit", Toast.LENGTH_SHORT).show();
}
else
{
dialog.dismiss();
AlertDialog.Builder builder = new Builder(ServiceListActivity.this);
builder.setMessage("delete?");
builder.setTitle("Notice");
builder.setPositiveButton("yes", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
// TODO Auto-generated method stub
Log.i("ServiceListActivity data1 = ", data.size()+"");
dialog.dismiss();
Message message = Message.obtain();
message.what = 1;
message.obj = id;
messageHandler.sendMessage(message);
}
});
builder.setNegativeButton("no", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which)
{
// TODO Auto-generated method stub
dialog.dismiss();
}
});
builder.create().show();
}
}
}).setNegativeButton("no", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
// TODO Auto-generated method stub
dialog.dismiss();
}
})
.show();
innter 클래스가있다 : 누군가가, 제발 도와 대단히 감사합니다, 그래서
class MessageHandler extends Handler
{
public MessageHandler(Looper looper)
{
super(looper);
}
@Override
public void handleMessage(Message msg)
{
switch (msg.what)
{
case 1:
String id = msg.obj.toString();
int i = DatabaseTools.DeleteServer(database, Integer.parseInt(id));
if (i==1)
{
data = DatabaseTools.queryDataFromDatabase(database,cursor);
Log.i("ServiceListActivity data2 = ", data.size()+"");
myListAdapter.notifyDataSetChanged();
Toast.makeText(ServiceListActivity.this, "finished", Toast.LENGTH_SHORT).show();
}
break;
}
}
나는이 문제를 해결하지 못할은.
runOnUiThread(new Runnable() {
public void run() {
myListAdapter.notifyDataSetChanged();
}
});
UPDATE :
선언 어딘가 처리기 중이 Runnable를
레코드 삭제 후'data.size()'가 logcat에 업데이트되어 있습니까? –
@PratikSharma 예, 항목 중 하나를 삭제하면 크기가 -1이됩니다. – jxdwinter
'myListAdapter.notifyDataSetChanged();'호출 전이나 후에'mListView.invalidate();'호출을 시도하십시오. –