0

我正在使用具有自定义行的 ListView,其中包含 2 个 TextView。我已经制作了自己的适配器,它在我的列表中运行良好。现在,我希望用户输入 2 个文本,然后在我的 ListView 中插入一个新行(带有用户输入)。我尝试过使用 add 方法,但我得到了 UnsupportedOperationException。我是否也必须覆盖 add 方法?如果是这样,我需要在其中做什么?谢谢你。

我将粘贴一段代码。如果您需要更多信息,请告诉我。

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;
}

}

4

3 回答 3

3

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

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

于 2012-07-28T14:31:54.517 回答
1

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

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>());

于 2012-07-28T14:35:30.187 回答
0

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

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

"

您需要更多地使用适配器而不是列表视图本身,列表视图毕竟使用适配器。

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

于 2012-07-28T14:34:30.390 回答