ListView удалить элемент из пользовательского BaseAdapter
У меня есть следующее BaseAdapter
учебный класс:
public class ListViewAdapter extends BaseAdapter{
String [] result, players;
Context context;
View rowView;
int [] imageId;
Holder holder;
private static LayoutInflater inflater=null;
public ListViewAdapter(MainActivity.PageFragment mainActivity, String[] prgmNameList, String[] players, int[] prgmImages) {
result=prgmNameList;
this.players=players;
context=mainActivity.getContext();
imageId=prgmImages;
inflater = ( LayoutInflater )context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return result.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
public class Holder
{
TextView title, players;
ImageView img;
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
// TODO Auto-generated method stub
holder=new Holder();
rowView = inflater.inflate(R.layout.server_layout, null);
holder.title=(TextView) rowView.findViewById(R.id.textView1);
holder.players=(TextView) rowView.findViewById(R.id.textView5);
holder.img=(ImageView) rowView.findViewById(R.id.imageView7);
holder.title.setText(result[position]);
holder.players.setText(players[position]);
holder.img.setImageResource(imageId[position]);
rowView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(final View v) {
new AlertDialog.Builder(context)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Remove")
.setMessage("Are you sure you want to remove this server?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "You LongClicked " + result[position], Toast.LENGTH_LONG).show();
//REMOVE ITEM
notifyDataSetChanged();
}
})
.setNegativeButton("No", null)
.show();
return false;
}
});
return rowView;
}
}
И следующее onCreate()
:
ListView servers =(ListView) view.findViewById(R.id.list_view);
BaseAdapter e = new ListViewAdapter(this,prgmNameList,players,prgmImages);
servers.setAdapter(e);
У меня вопрос, как я могу удалить выбранный элемент в методе onClick. Я пытался удалить его из ListView
а также rowView=null;
но те не работали. заранее спасибо
3 ответа
Определите метод с именем removeRow в ListViewAdapter.
public void removeRow(int position) {
// Remove the element from the results array here.
notifyDataSetChanged();
}
Некоторые предложения: Используйте RecyclerView, если можете. Эта структура имеет лучшие способы обработки анимации удаления и т. Д. Пожалуйста, используйте convertView в getView(). Не раздувать новый взгляд на каждый вызов getView. Это сделает ваш просмотр списка намного быстрее.
Если removeViewAt() выдает ошибку, просто нажмите на позицию элемента, которую вы щелкнули, и удалите ее из вашего массива. А затем произнесите adapter.notifyDataSetChanged(); представление будет обновлено само по себе.
Как только элемент был удален из вашего списка внутри адаптера, попробуйте сделать следующее в вашем адаптере:
this.notifyItemRemoved(position);
Когда позиция - это позиция удаленного элемента.