如何修改列表视图的同一行中的多个文本视图

时间:2012-07-28 14:25:31

标签: android android-widget

我正在使用带有2个TextView的自定义行的ListView。我已经制作了自己的适配器,它的列表工作正常。现在,我希望用户输入2个文本,然后在我的ListView中插入一个新行(带有用户的输入)。我尝试过使用add方法但是我得到了UnsupportedOperationException。我是否还必须覆盖添加方法?如果是的话,我需要做什么呢?谢谢。

我要粘贴一段代码。如果您需要更多信息,请与我们联系。

public class ChatAdapter extends ArrayAdapter<ChatItems>{

Context context;
int textViewResourceId;
ChatItems[] objects;


public ChatAdapter(Context context, int textViewResourceId,
        ChatItems[] objects) {
    super(context, textViewResourceId, objects);

    this.context = context;
    this.textViewResourceId = textViewResourceId;
    this.objects = objects;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ChatHolder holder = null;


    if(row == null){
    LayoutInflater inflater =  ((Activity)context).getLayoutInflater();
    row = inflater.inflate(textViewResourceId, null);

    holder = new ChatHolder();
    holder.user = (TextView) row.findViewById(R.id.textUser);
    holder.msg = (TextView) row.findViewById(R.id.textText);

    row.setTag(holder);

    }else
        holder = (ChatHolder) row.getTag();


    ChatItems items = objects[position];
    holder.msg.setText(items.msg);
    holder.user.setText(items.user);


    return row;

}
static class ChatHolder{
    TextView user;
    TextView msg;
}

}

public class ChatItems {

String user;
String msg;

public ChatItems(String user, String msg){
    this.user = user;
    this.msg = msg;
}

}

3 个答案:

答案 0 :(得分:3)

我猜您使用了不可变列表,因此当您尝试将元素添加到列表时它会引发UnsupportedOperationException。考虑使用ArrayList或可变的东西。

如果您可以提供logcat,那么它将有助于(我们)更多。

答案 1 :(得分:1)

如果您想在ArrayAdapter使用ArrayList而不是Array作为后端数据持有者添加其他项目。如果您使用的是Array,则ArrayAdapter将在内部使用List,以后无法修改。

objects删除ChatAdapter字段。

重写你的构造函数,如

public ChatAdapter(Context context, int textViewResourceId, List<ChatItems> objects) {
    super(context, textViewResourceId, objects);
    this.context = context;
    this.textViewResourceId = textViewResourceId;
}

获取getView()中的项目使用ChatItems items = getItem(position)代替ChatItems items = objects[position];

最后创建适配器,如adapter = new ChatAdapter(this, R.layout.chat_item, new ArrayList<ChatItems>());

答案 2 :(得分:0)

http://developer.android.com/reference/android/widget/ArrayAdapter.html

” 但是引用了TextView,它将填充数组中每个对象的toString()。您可以添加自定义对象的列表或数组。覆盖对象的toString()方法,以确定将为列表中的项显示的文本。

您需要使用适配器而不是列表视图本身,列表视图使用适配器。

该文档应包含您需要的所有信息。 祝好运!记得发布你的解决方案。