ListView Multisélection

J'ai essayé de mettre en œuvre la multisélection sur Android ListView. Je veux sélectionner/désélectionner plus d'un article et de ces articles doivent garder en surbrillance ou pas.
Je ne veux pas utiliser les CheckBoxs pour la sélection des éléments.

J'ai mis des fonctionnalités dans ma carte. Voici le code:

public class MultiSelectionAdapter extends BaseAdapter {
private List<Event> streams;
private LayoutInflater inflater;
private Context context;
//I keep the selected items index.
private static List<Integer> selectedIndexList = new ArrayList<Integer>();
public MultiSelectionAdapter(Context context, List<Event> streams) {
this.streams = streams;
this.inflater = LayoutInflater.from(context);
this.context = context;
selectedIndexList.clear();
Integer i = -1;
selectedIndexList.add(i);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
//if (convertView == null) {
convertView = inflater.inflate(R.layout.adapter_stream_ins, null);
holder = new ViewHolder();
holder.hTitle = (TextView) convertView.findViewById(R.id.adapter_title);
holder.hProfileImage = (ImageView) convertView.findViewById(R.id.adapter_profileimage);
holder.hMainImage = (WebImageView) convertView.findViewById(R.id.adapter_mainimage);
//convertView.setTag(holder);
//} else {
// holder = (ViewHolder) convertView.getTag();
//}
for(Integer i : selectedIndexList){
if (position == i) {
//Here I get the view inside the layout and set it to enable (the item has a selector as background) 
RelativeLayout mainLayout = (RelativeLayout) ((ViewGroup) convertView).getChildAt(1);
LinearLayout item = (LinearLayout) ((ViewGroup) mainLayout).getChildAt(1);
item.setSelected(true);
}
}
Ins eventItem = (Inspiration) getItem(position);
holder.hTitle.setText(eventItem.getName());
holder.hMainImage.setImageWithURL(context, WebServiceConfig.getImageUrl(eventItem.getImagePath()));
return convertView;
}
public int getCount() {
return this.streams.size();
}
public Event getItem(int position) {
return this.streams.get(position);
}
public long getItemId(int position) {
return position;
}
public void add(Event e) {
streams.add(e);
}
public void addAll(List<Event> events) {
streams.addAll(events);
}
public void remove(Event e) {
streams.remove(e);
}
public void setSelectdIndexList(List<Integer> l){
selectedIndexList = l;
notifyDataSetChanged();
}
class ViewHolder {
TextView hTitle;
ImageView hProfileImage;
WebImageView hMainImage;
}

}

J'ai mon activité je enregistrer les éléments sélectionnés et les indexs dans une Liste

public List<Event> insSelected = new ArrayList<Event>();
public static List<Integer> selecteditems = new ArrayList<Integer>();

Enfin dans la liste setOnItemClickListener méthode que j'ai mise à jour de la liste et de la carte.

streamsListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long arg3) {   
Ins selectedItem = (Ins) streamsListView.getItemAtPosition(position);
if(insSelected.contains(selectedItem)){
insSelected.remove(selectedItem);
selecteditems.remove((Integer)position);
eventAdapter.setSelectdIndexList(selecteditems);
eventAdapter.notifyDataSetChanged();
}else{
insSelected.add(selectedItem);
selecteditems.add((Integer)position); 
eventAdapter.setSelectdIndexList(selecteditems);
eventAdapter.notifyDataSetChanged();
}
}
});

Je sais que mon code dans la carte est totalement inefficace, parce que je dois dessiner la liste à chaque fois que je sélectionner ou désélectionner un élément.

Des idées sur comment l'améliorer?
Merci!

Tu veux dire comme ceci stackoverflow.com/questions/18549271/...
Avez-vous capable de le faire ? Je veux faire de cette fonctionnalité dans mon projet.
Vous pouvez utiliser un recycleur de la vue et de la bindview titulaire fonction de la charge utile pour modifier le point n'est pas de l'ensemble de la liste geoffreymetais.github.io/code/diffutil

OriginalL'auteur Ale | 2013-10-15