Существует адаптер, который создает вьюшку, заполняет её инфой из массива и отдает её. В каждой вьюшке есть 4 кнопки. Для всех вьюшек одинаковая разметка
Как мне по нажатию кнопки получать id элемента в массиве, который принадлежит конкретно этой view? Или может я не правильно понимаю принцип работы адаптера?
// пункт списка
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// используем созданные, но не используемые view
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.magazine_cell, parent, false);
}
Magazine magazine = getProduct(position);
String viewsCount = String.valueOf(magazine.getViewsCount());
String title = magazine.getTitle();
String imageURL = magazine.getTitleImage();
String preview = magazine.getPreview();
viewTitle = (TextView) view.findViewById(R.id.title);
viewTitle.setText(title);
viewViewsCount = (TextView) view.findViewById(R.id.viewsCount);
viewViewsCount.setText(viewsCount);
viewPreview = (TextView) view.findViewById(R.id.preview);
viewPreview.setText(preview);
ImageView magazineImage = (ImageView) view.findViewById(R.id.magazineImage);
Picasso.with(context).load(imageURL).into(magazineImage);
cell = (RelativeLayout) view.findViewById(R.id.cell);
cell.setOnClickListener(viewsClickListener);
buttons.add(downloadPDF = (Button) view.findViewById(R.id.downloadPDF));
buttons.add(downloadText = (Button) view.findViewById(R.id.downloadText));
buttons.add(readText = (Button) view.findViewById(R.id.readText));
buttons.add(readPDF = (Button) view.findViewById(R.id.readPDF));
createListenersForButton();
setPreviewMode();
setButtonsColors(magazine);
return view;
}
private View.OnClickListener viewsClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int id = v.getId();
if(id == R.id.downloadPDF){
//TODO
}else if(id == R.id.downloadText){
}else if(id == R.id.readPDF){
}else if(id == R.id.readText){
}else if (id == R.id.cell){
switchShowMode();
}else if(id == R.id.preview){
switchShowMode();
}
}
};
У меня в каждом элементе ListView есть 4 кнопки. Мне надо, чтобы при нажатии на кнопку в конкретном View, в нем же кое-что и менялось
// пункт списка
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// используем созданные, но не используемые view
View view = null;
view = lInflater.inflate(R.layout.magazine_cell, parent, false);
Button downloadPDF = (Button) view.findViewById(R.id.downloadPDF);
downloadPDF.setOnclickListener(GetviewsClickListener(position,view));
return view;
}
private View.OnClickListener GetviewsClickListener(int pos,View view)
{
if(pos==1)
return new View.OnClickListener() {
@Override
public void onClick(View v) {
LinearLayout l = (LinearLayout) view;
l.setBackgroundColor(...);
}
if(pos==2)
//....
}
Вот такой пример. При нажатии на кнопки в i-той позиции мы изменяем ТОЛЬКО view на i-той позиции. Т.е у меня 2 листенера на кнопки выше. При нажатии на первую сменится цвет фона ТОЛЬКО данного view в ListView. Если listener объемный, то может есть смысл вынести его в другое место или еще как-то поправить код для понятности и красоты, но суть не меняется. Надеюсь я ответил на вопрос. Если у кого есть идеи по "лучшей практики", я с удовольствием увидел бы другие варианты.
Сделал с вынесенным листенером. Понятно что условия любые можно делать. Моя функция(GetviewsClickListener) просто возвращает листенер. seOnClickListener нужен чтобы присвоить возвращаемый листенер.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется файл в котором сохранен список времени выполнения, при нажатии на кнопку происходит извлечение времени из файла
Не совсем сведущ в веб-программировании, поэтому попрошу не принимать близко к сердцу мои, возможно глупые, вопросы :)
ЗдравствуйтеИзучаю спринг, пытаюсь загрузить фото