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!
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
Vous devez vous connecter pour publier un commentaire.
c'est un exemple de code de ce que j'utilise pour créer des cartes.
La première Fonction est utilisée pour appeler l'adaptateur personnalisé à partir de votre activité principale. ListAdapter est personnalisé de votre fichier Java pour être appelé.
Cela va changer la mise en page couleur des éléments que vous avez cliqué et les ajouter à une liste pour lorsque vous souhaitez les utiliser. Il modifie également la couleur de l'arrière après la sélection et supprime l'élément de la liste.
La ListAdapter classe est comme suit:
J'espère que cette aide.
PS. listadapter.xml seulement titulaire d'un textview dans un RelativeLayout.
OriginalL'auteur Janwilx72