Я попытался реализовать мультисетацию на Android ListView. Я хочу выбрать /отменить решение более одного элемента, и эти элементы должны оставаться выделенными или нет.
Я не хочу использовать флажки для выбора элементов. Вот код: < /p>
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;
}
< /code>
} < /p>
i My Activity Я сохраняю выбранные элементы и индексы в списке < /p>
public List insSelected = new ArrayList();
public static List selecteditems = new ArrayList();
< /code>
Наконец -то в методе ListView setOnitemClickListener Я обновляю список и адаптер. < /p>
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();
}
}
});
< /code>
Я знаю, что мой код в адаптере абсолютно неэффективен, потому что я должен нарисовать ListView каждый раз, когда я выбираю или отказался от элемента. < /p>
Любые идеи о том, как его улучшить?>
Подробнее здесь: https://stackoverflow.com/questions/193 ... iselection
ListView MultiSeletection ⇐ Android
Форум для тех, кто программирует под Android
1754949760
Anonymous
Я попытался реализовать мультисетацию на Android ListView. Я хочу выбрать /отменить решение более одного элемента, и эти элементы должны оставаться выделенными или нет.
Я не хочу использовать флажки для выбора элементов. Вот код: < /p>
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;
}
< /code>
} < /p>
i My Activity Я сохраняю выбранные элементы и индексы в списке < /p>
public List insSelected = new ArrayList();
public static List selecteditems = new ArrayList();
< /code>
Наконец -то в методе ListView setOnitemClickListener Я обновляю список и адаптер. < /p>
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();
}
}
});
< /code>
Я знаю, что мой код в адаптере абсолютно неэффективен, потому что я должен нарисовать ListView каждый раз, когда я выбираю или отказался от элемента. < /p>
Любые идеи о том, как его улучшить?>
Подробнее здесь: [url]https://stackoverflow.com/questions/19378414/listview-multiselection[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия