0

2つのTextViewを持つカスタム行を持つListViewを使用しています。私は自分のアダプターを作成しましたが、リストで正常に機能しています。ここで、ユーザーに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 に答える