我在使用 ArrayAdapter 时遇到问题,因为我使用的是消息 ArrayList,并且想要显示消息数据。
我在 getView 中遇到问题,因为我不确定如何遍历 ArrayList 并正确显示数据。
我确实喜欢这样:
在 Activity 中我有这个:
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 个消息文本要显示,它确实显示,但只有第一个具有 ok 值,其他两个具有来自 TextView 的字符串(未设置)。日志中一切正常,消息的所有 3 个值都正常。
我做错了什么吗?
最佳答案
我不太清楚你的问题是什么。如果您的 ArrayList 具有三个元素,并且您尝试显示包含三个条目的列表,则上述代码将无法执行此操作。 getView
对于每个列表条目都会调用一次。 position
参数告诉方法该方法应该填充哪个列表条目。您根本没有使用 position
;相反,您将循环遍历整个列表,但这不起作用。相反,尝试删除 while
循环并使用类似
viewHolder.textViewItem.setText(message.get(position).getMessageText());
// ^^^^^^^^
就像我说的,我不完全确定您要做什么,但我认为您需要做类似的事情。
关于java - 使用 ArrayList 的 ArrayAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24869657/