Я создал адаптер и пытаюсь заполнить ListView данными из String ArrayList. Я заметил, что каждый 4-й, 8-й и 12-й элементы, которые хранятся в моем ArrayList, отсутствуют в моем ListView. Если я удалить, если/другое (вид == NULL) состояние, все работает отлично, за исключением я получаю предупреждение ворса >>Unconditional layout inflation from view adapter: Should use View Holder pattern (use recycled view passed into this method as the second parameter) for smoother scrolling
Адаптер не заполняется из ArrayList должным образом
Вот мой GetView код, который пропускает каждый 4-й, 8-й, 12-й пункт
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = convertView;
ViewHolder holder;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.item_select, null);
holder = new ViewHolder();
holder.rlLeft = (RelativeLayout) view.findViewById(R.id.rl_left);
holder.rlRight = (RelativeLayout) view.findViewById(R.id.rl_right);
holder.tvTitle = (TextView) view.findViewById(R.id.tv_title);
holder.tvLeftBubble = (TextView) view.findViewById(R.id.tv_left_bubble);
holder.tvRightBubble = (TextView) view.findViewById(R.id.tv_right_bubble);
holder.tvTitle.setText(mArrySelect.get(position).getTitle());
// set visibility gone on views
if (position % 2 == 0) {
holder.rlLeft.setVisibility(View.GONE);
holder.tvRightBubble.setText(mArrySelect.get(position).getMessage());
} else {
holder.rlRight.setVisibility(View.GONE);
holder.tvLeftBubble.setText(mArrySelect.get(position).getMessage());
}
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
return view;
}
Вот код, который работает и отображает все элементы в моей mArraySelect (String ArrayList), но дает мне предупреждение пуха на моем Inflate
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = convertView;
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.item_select, null);
holder = new ViewHolder();
holder.rlLeft = (RelativeLayout) view.findViewById(R.id.rl_left);
holder.rlRight = (RelativeLayout) view.findViewById(R.id.rl_right);
holder.tvTitle = (TextView) view.findViewById(R.id.tv_title);
holder.tvLeftBubble = (TextView) view.findViewById(R.id.tv_left_bubble);
holder.tvRightBubble = (TextView) view.findViewById(R.id.tv_right_bubble);
holder.tvTitle.setText(mArrySelect.get(position).getTitle());
// set visibility gone on views
if (position % 2 == 0) {
holder.rlLeft.setVisibility(View.GONE);
holder.tvRightBubble.setText(mArrySelect.get(position).getMessage());
} else {
holder.rlRight.setVisibility(View.GONE);
holder.tvLeftBubble.setText(mArrySelect.get(position).getMessage());
}
}
Кто-нибудь есть идеи относительно того, что мне не хватает в моей первой реализации в вызвать пропустить? Мое состояние - просто чередовать два разных вида, и это работает нормально. Просто, что 4, 8 и 12-й элемент в моем String ArrayList не отображаются. В массиве всего 12 элементов.
Спасибо заранее!
Хех! Я не совсем понимаю это, но на самом деле это работает. Благодаря! – portfoliobuilder
Вы получите ответ, как только подумаете, почему мы используем внешний блок if и объект держателя вида :) –