ArrayAdapter с использованием ArrayList
У меня проблемы с ArrayAdapter, потому что я использую ArrayList сообщений и хочу отображать данные сообщений.
У меня проблема в getView, потому что я не уверен, как пройти через ArrayList и правильно отобразить данные.
Я сделал это так:
В Деятельности у меня есть это:
ArrayAdapterItem arrayAdapter = new ArrayAdapterItem(DashboardActivity.this,
R.layout.list_view_row_item, result);
listViewItems.setAdapter(arrayAdapter);
и в классе ArrayAdapterItem у меня есть:
public class ArrayAdapterItem extends ArrayAdapter<Message> {
ArrayList<Message> message = new ArrayList<Message>();
Context mcontext;
int layout;
int messageNumber;
public ArrayAdapterItem(Context mcontext, int resource, ArrayList<Message> message) {
super(mcontext, resource);
this.message = message;
this.mcontext = mcontext;
this.layout = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent ){
ViewHolderItem viewHolder;
if(convertView==null){
LayoutInflater inflater = ((Activity) mcontext).getLayoutInflater();
convertView = inflater.inflate(layout, parent, false);
viewHolder = new ViewHolderItem();
viewHolder.textViewItem = (TextView) convertView.findViewById(R.id.textViewItem); //ovde ih dodajem
convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolderItem) convertView.getTag();
}
if(message!=null){
while(messageNumber>0){
messageNumber--;
viewHolder.textViewItem.setText(message.get(messageNumber).getMessageText());
Log.d("Lista AUTORA: ", message.get(messageNumber).getMessageText() + "");
}
}
return convertView;
}
@Override
public int getCount() {
messageNumber = message.size();
return messageNumber;
}
static class ViewHolderItem {
TextView textViewItem;
}
}
У меня есть 3 текста сообщения для отображения, и он делает, но только первый из них имеет значение ОК, а два других имеет строку из TextView (это не установлено). В журнале все нормально, все 3 значения сообщений в порядке.
Любые иды, что я сделал не так?
1 ответ
Я не совсем понимаю, в чем ваша проблема. Если твой ArrayList
имеет три элемента, и вы пытаетесь отобразить список с тремя записями, приведенный выше код этого не сделает. getView
вызывается один раз для каждой записи списка. position
Параметр сообщает методу, какую запись списка должен заполнить метод. Вы не используете position
совсем; вместо этого вы просматриваете весь список, но это не сработает. Вместо этого попробуйте удалить while
цикл и используя что-то вроде
viewHolder.textViewItem.setText(message.get(position).getMessageText());
// ^^^^^^^^
Как я уже сказал, я не совсем уверен, что вы пытаетесь сделать, но я думаю, вам нужно сделать что-то похожее на это.