ListView Multiselection

Я попытался реализовать множественный выбор на Android ListView. Я хочу выбрать / отменить выбор более чем одного элемента, и эти элементы должны оставаться выделенными или нет. Я неЯ не хочу использовать флажки для выбора элементов.

Я поместил функцию все в моем адаптере. Вот код:}

public class MultiSelectionAdapter extends BaseAdapter {

private List streams;
private LayoutInflater inflater;
private Context context;

// I keep the selected items index.
private static List selectedIndexList = new ArrayList();


public MultiSelectionAdapter(Context context, List 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 events) {
    streams.addAll(events);
}

public void remove(Event e) {
    streams.remove(e);
}



public void setSelectdIndexList(List l){
    selectedIndexList = l;
    notifyDataSetChanged();
}


class ViewHolder {
    TextView hTitle;
    ImageView hProfileImage;
    WebImageView hMainImage;
}

В своей деятельности я сохраняю выбранные элементы и индексы в списке.

public List insSelected = new ArrayList();
public static List selecteditems = new ArrayList();

Наконец, в методе ListView setOnItemClickListener я обновляю список и адаптер.

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();
            }

        }
    });

Я знаю, что мой код в адаптере совершенно неэффективен, потому что мне приходится рисовать ListView каждый раз, когда я выбираю или отменяю выбор элемента.

Есть идеи как его улучшить? Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос