Это первый раз, когда мне нужно использовать ArrayAdapter , чтобы показать раскладку из нескольких элементов. После большого количества успешной работы с различными адаптерами этот сводит меня с ума.
getView (..., position, ...) всегда возвращает 0-7 [EDIT], поэтому я никогда не вижу в моем ArrayList элементы, которые находятся в позиции> = 7 [/ EDIT]. Я знаю, это видимая позиция, но как мне выбрать правильный объект в ArrayList?
РЕДАКТИРОВАТЬ: В настоящее время я получаю только первые 8 элементов из моего массива, потому что позиция приходит только от 0-7 - даже для 50-элементного ArrayList. Я не вижу способа позиционирования в ArrayList без «реальной» позиции.
Документы говорят следующее - но я не понимаю. Кто-нибудь успешно реализовал ArrayAdapter со сложной компоновкой? Что означает документ и как его реализовать?
Если вы хотите использовать более сложный
макет, используйте конструкторы, которые также
принимает идентификатор поля Идентификатор этого поля должен
ссылаться на TextView в более широком
макет ресурса. Однако TextView
ссылка, она будет заполнена
toString () каждого объекта в
массив. Вы можете добавить списки или массивы
нестандартные объекты. Переопределить
Метод toString () ваших объектов для
определить, какой текст будет отображаться
для элемента в списке. Использовать
что-то кроме TextViews для
отображение массива, например,
ImageViews, или иметь некоторые данные
кроме того toString () результаты заполняют
представления, переопределить getView (int, View,
ViewGroup), чтобы вернуть тип представления
ты хочешь.
Большое спасибо заранее
hjw
Вот код на данный момент:
public class HappyAdapter extends ArrayAdapter<Happy> {
static class ViewHolder {
private ImageView imageView;
private TextView textViewBottom;
private TextView textViewTop;
}
private ArrayList<Happy> arrayListHappy;
private DrawableCache drawableCache = DrawableCache.getInstance();
private int layout;
@Override
public int getCount() {
return arrayListHappy.size();
}
@Override
public View getView(int position, View contentView, ViewGroup viewGroup) {
// position always 0-7
View view = null;
ViewHolder viewHolder = null;
if (contentView == null) {
LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(layout, null);
if (view != null) {
viewHolder = new ViewHolder();
viewHolder.imageView = (ImageView) view.findViewById(R.id.happyactivity_row_image_left);
viewHolder.textViewBottom = (TextView) view.findViewById(R.id.happyactivity_row_text_bottom);
viewHolder.textViewTop = (TextView) view.findViewById(R.id.happyactivity_row_text_top);
view.setTag(viewHolder);
}
} else {
view = contentView;
viewHolder = (ViewHolder) contentView.getTag();
}
if (viewHolder != null) {
Happy happy = arrayListHappy.get(position);
if (happy != null) {
viewHolder.imageView.setUrl(happy.getImageThumbnail());
drawableCache.fetchDrawable(happy.getImageThumbnail(), viewHolder.imageView);
viewHolder.textViewBottom.setText(String.valueOf(position));
viewHolder.textViewTop.setText(String.valueOf(viewHolder.position));
}
}
return view;
}
public HappyAdapter(Context context, int layout, ArrayList<Happy> arrayListHappy) {
super(context, layout, arrayListHappy);
this.arrayListHappy = arrayListHappy;
this.layout = layout;
}
}
Это часть макета строки:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/happyactivity_row_image_left"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_width="fill_parent" />
<TextView
style="@style/TextViewStandard"
android:id="@+id/happyactivity_row_text_top"
android:layout_weight="1" />
<TextView
style="@style/TextViewStandard"
android:id="@+id/happyactivity_row_text_bottom"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>