По одной из предыдущих тем потому, как создать свой адаптер мне стало ясно т.к. мне требовалось сделать так что бы на последних двух элементах списка отображались checkbox-ы.
class MySimpleArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public MySimpleArrayAdapter(Context context, String[] values) {
super(context, R.layout.itemslid, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.itemslid, parent, false);
TextView tvText = (TextView) rowView.findViewById(R.id.tvText);
TextView tvText2 = (TextView) rowView.findViewById(R.id.tvText2);
LinearLayout lnr = (LinearLayout) rowView.findViewById(R.id.backliner);
CheckBox cbChecked = (CheckBox) rowView.findViewById(R.id.cbChecked);
String s = values[position];
if (s.startsWith("ID1") ) {
tvText.setText("Заголовок1");
tvText2.setText("Название1");
cbChecked.setVisibility(View.GONE);
lnr.setBackgroundResource(R.color.Green);
}
else if (s.startsWith("ID2")) {
tvText.setText("Заголовок2:");
tvText2.setText("Название2");
cbChecked.setVisibility(View.GONE);
lnr.setBackgroundResource(R.color.Green);
}
else if (s.startsWith("ID3")) {
tvText.setText("Заголовок3");
tvText2.setText("Название3");
cbChecked.setVisibility(View.VISIBLE);
}
else if (s.startsWith("ID4")){
tvText.setText("Заголовок4");
tvText2.setText("Название4");
cbChecked.setVisibility(View.VISIBLE);
}
return rowView;
}
}
String[] names = {"ID1", "ID2", "ID3", "ID4"};
// создаем адаптер
MySimpleArrayAdapter sAdapter = new MySimpleArrayAdapter(getActivity(), names);
setListAdapter(sAdapter);
}
Но в данный момент столкнулся я с новой задачей над которой бьюсь уже день, вечер, уже ночь пошла.
Как мне реализовать множественный выбор на моем данном примере????????
MyArrayAdapter Help Me!
Re: MyArrayAdapter Help Me!
Используй Свой класс вместо String:
Пример адаптера:
В активити используется конструктор:
MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(Context context, ArrayList<MyContainer> myList)
myListView.setAdapter( adapter );
В конце работы можно пробежаться по аррейлисту myList и просмотреть значения boolean.
П.С. myList передается в адаптер как ссылка и все изменения будут влиять на myList в активити и наоборот, поменяв его в активити можно вызвать notifyDataSetChanged() у адаптера и он обновится.
Код: Выделить всё
class MyContainer {
String value;
boolean isCheked;
// добавь конструктор
// добавь геттеры и сеттеры (alt + insert)
}
Код: Выделить всё
public class MySimpleArrayAdapter extends ArrayAdapter<MyContainer> {
// штука типа кеша (хранит ссылку на вью, чтобы при пересоздании (скролинг) не тратить ресурсы на поискВьюБайИД)
private static class ViewHolder {
TextView tvValue;
CheckBox checkBox;
}
public MySimpleArrayAdapter (Context context, ArrayList<MyContainer> myList) {
super(context, R.layout.item_user, myList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// получить текущий элемент
MyContainer container = getItem(position);
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.item_container, parent, false); // указать свой хмл( достаточно лейаута + чекбокс с текстВью )
viewHolder.tvValue= (TextView) convertView.findViewById(R.id.tvValue);
viewHolder.checkBox= (CheckBox ) convertView.findViewById(R.id.checkBox);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// Здесь делается основная работа.
viewHolder.tvValue.setText(container.getValue);
viewHolder.checkBox.setOn чнедж лисенер {
в котором container.set isCheked в текущее состояние чек бокса: viewHolder.checkBox.isChekecd()
вродь нужно еще notifyDataSetChanged() вызвать для обновления, что не помню.
}
return convertView;
}
}
MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(Context context, ArrayList<MyContainer> myList)
myListView.setAdapter( adapter );
В конце работы можно пробежаться по аррейлисту myList и просмотреть значения boolean.
П.С. myList передается в адаптер как ссылка и все изменения будут влиять на myList в активити и наоборот, поменяв его в активити можно вызвать notifyDataSetChanged() у адаптера и он обновится.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: MyArrayAdapter Help Me!
Все ОК, да вот только под запарился не мог позицию получить, все null да null, забыл совсем про cbChecked.setTag(position); ))) а теперь хоть куда) можно теперь и свой класс сделать и адаптер переписать по предложенному! + lvlUp )
Да и Спасибо большое за помощь!
Код: Выделить всё
public class MyClass {
String value;
String state;
Boolean isCheked;
MyClass(String _value, String _state, Boolean _isCheked){
value = _value;
state = _state;
isCheked = _isCheked;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Boolean getIsCheked() {
return isCheked;
}
public void setIsCheked(Boolean isCheked) {
this.isCheked = isCheked;
}
}
Да и Спасибо большое за помощь!
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: MyArrayAdapter Help Me!
Надеюсь вы позаимствовали из предложенного вам примера этот код?
[syntax=java5]
if (convertView == null) {
...
} else {
...
}
[/syntax]
?
[syntax=java5]
if (convertView == null) {
...
} else {
...
}
[/syntax]
?
