У меня есть пользовательский адаптер, который расширяет ArrayAdapter
. У меня разные раскладки для разных предметов. Мне нравится делать предметы, относящиеся к конкретному типу unclickable
. Вот мой код:Установить конкретный элемент unclickable ListView android
package android.adapters;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Switch;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import android.items.ItemProperties;
public class CustomAdapter extends ArrayAdapter<ItemProperties> {
private static final int TYPE_ITEM_AMOUNTS = 0;
private static final int TYPE_ITEM_LIMITS = 1;
private static final int TYPE_MAX_COUNT = 2;
private LayoutInflater mInflater;
private ArrayList<Integer> positions = new ArrayList<Integer>();
private List<ItemProperties> items = new ArrayList<ItemProperties>();
public CustomAdapter(Context context, int resource, List<ItemProperties> itemCards, ArrayList positions) {
super(context, resource, items);
this.positions = positions;
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public ItemProperties getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflaterRow = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = null;
int type = getItemViewType(position);
switch (type) {
case TYPE_ITEM_AMOUNTS:
rowView = inflaterRow.inflate(R.layout.item_details, parent, false);
rowView.setEnabled(false);
rowView.setOnClickListener(null);
TextView txtName = (TextView) rowView.findViewById(R.id.text_name);
txtName.setText(itemCards.get(position).getCardLabelDesc());
TextView txtValue = (TextView) rowView.findViewById(R.id.text_value);
txtValue.setText(itemCards.get(position).getCardLabelValue());
break;
case TYPE_ITEM_LIMITS:
rowView = inflaterRow.inflate(R.layout.item_limit_settings, parent, false);
rowView.setEnabled(true);
TextView txtLimitDesc = (TextView) rowView.findViewById(R.id.text_item_description);
txtLimitDesc.setText(itemCards.get(position).getCardLabelDesc());
Switch limitEnable = (Switch) rowView.findViewById(R.id.enable_limit);
limitEnable.setText("");
TextView txtLimit = (TextView) rowView.findViewById(R.id.txt_limit);
txtLimit.setText(itemCards.get(position).getCardLabelValue());
break;
}
return rowView;
}
@Override
public int getViewTypeCount() {
return TYPE_MAX_COUNT;
}
@Override
public int getItemViewType(int position) {
if (positions.contains(position))
return TYPE_ITEM_LIMITS;
else
return TYPE_ITEM_AMOUNTS;
}
}
Однако это не работает для меня, ничто не доступно для контакта.
В деятельности, в которой я заселить список у меня есть это:
propertiesAdapter=new
CustomAdapter(this,R.layout.item_details,itemPropertiesList,positions);
listDetails.setAdapter(propertiesAdapter);
listDetails.setOnItemClickListener(this);
и у меня есть onItemClick
обработчик событий.
Кто-нибудь знает, в чем проблема?
Что произойдет, если вы удалите rowView.setEnabled (false); rowView.setOnClickListener (нуль); от случая TYPE_ITEM_AMOUNTS. Затем оба типа элементов становятся кликабельными? – random
Нет, первый тип доступен для кликабельности, второй нет, и я хочу архивировать обратное – vikifor
Является ли listDetails интерфейсом ListView? Является ли listDetails ссылкой на ID в макете для ListView? –