Пользовательский просмотр списка, удаление строки в Android

#android

#Android

Вопрос:

Я использую пользовательский просмотр списка в своем приложении. В пользовательском просмотре списка во всех строках я разместил кнопку изображения. Если я нажму на эту кнопку изображения, мне придется удалить строку с нажатой кнопкой в пользовательском представлении списка. Кто-нибудь может сказать мне, как это сделать? Приведенный ниже код не работает:

 imgcross=(ImageView)v.findViewById(R.id.imgcross);
 imgcross.setId(position);

 if(v.getId()==R.id.imgcross)
        {
            Log.d("image id is",Integer.toString(imgcross.getId()));
            myScheduleList.removeViewAt(imgcross.getId());
            Toast.makeText(MyScheduleDay0RequestedMeeting.this, "Cross Button is Clicked", Toast.LENGTH_LONG).show();   

        }






 if (v.getId()==R.id.imgcross) 
{ //Integer index=(Integer)imgcross.getTag(); 
//Log.d("image id is",Integer.toString(index)); 
int index=imgcross.getId(); (imgcross.getId()); 
MyScheduleBean.listName.remove(index); 
MyScheduleBean.dateValue.remove(index); 
MyScheduleBean.dateValue.remove(index); 
CAdapter = new CustomAdapter(this,MyScheduleBean.listName,MyScheduleBean.dateValue,MyScheduleBe­an.meeting,R.layout.myschedule_day0_requestedmeetingrow,to);
myScheduleList.setAdapter(CAdapter);
} 
  

Спасибо

Ответ №1:

Вам нужно удалить данные из базового Adapter . Все сделано правильно, это автоматически обновит ListView . В противном случае также вызовите notifyDataSetChanged() на Adapter , и это приведет к ListView обновлению.

Комментарии:

1. можете ли вы рассказать, как удалить данные из базового адаптера в событии щелчка, даже если я пытался с этим

2. if(v.getId()==R.id.imgcross) { //Целочисленный индекс=(Integer)imgcross.getTag(); //Log.d («идентификатор изображения равен»,Integer.toString(index)); int index=imgcross.getId(); (imgcross.getId()); MyScheduleBean.ListName.remove(индекс); MyScheduleBean.dateValue.remove(индекс ); MyScheduleBean.dateValue.remove(индекс); CAdapter = новый CustomAdapter(this,MyScheduleBean.listName,MyScheduleBean.dateValue,MyScheduleBean.meeting,R.layout.myschedule_day0_requestedmeetingrow,to) ; myScheduleList.setAdapter(CAdapter); }

3. @mohan: Я понятия не имею, что делает любой из этих кодов. Чтобы удалить данные из ArrayAdapter , вызовите remove() на ArrayAdapter . Чтобы удалить данные из CursorAdapter , измените базовый источник данных (например, базу данных) и requery() Cursor .

Ответ №2:

Я слишком долго искал этот ответ — большое вам спасибо. После удаления записи из базы данных с:

 DBRecordOperation.deleteRecord(dbRecord);
  

просто удалите запись из ListView с помощью:

 adapter.remove(dbRecord);
  

Я делаю это длинным щелчком мыши в ListView. Полный код для onContextItemSelected является:

 @Override
public boolean onContextItemSelected(MenuItem item){

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
    DBRecord dbRecord = (DBRecord) getListAdapter().getItem(info.position);
    int dbRecordId = dbRecord.getId();

    DBRecordOperation.deleteRecord(dbRecord);
    adapter.remove(dbRecord);


    return true;

}