簡體   English   中英

使用自定義自定義適配器將Item添加到自定義ListView

[英]add Item to custom ListView with custom custom Adapter

我有一個自定義適配器(ArrayAdapter),我想在代碼中動態添加項目。

我的ArrayAdapter看起來像這樣:

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class ChatList extends ArrayAdapter<ChatListItem> {

Context context;
int layoutResourceId;
ChatListItem data[] = null;

public ChatList(Context context, int layoutResourceId, ChatListItem[] data) {
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
}

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

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

        holder = new ChatHolder();
        holder.txtText = (TextView) row.findViewById(R.id.txtText);
        holder.txtUser = (TextView) row.findViewById(R.id.txtUser);
        holder.txtVersion = (TextView) row.findViewById(R.id.txtVersion);
        holder.txtZeit = (TextView) row.findViewById(R.id.txtZeit);

        row.setTag(holder);

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

    holder.txtText.setText(entry.text);
    holder.txtUser.setText(entry.user);
    holder.txtVersion.setText(entry.v);
    holder.txtZeit.setText(entry.time);

    return row;
}

static class ChatHolder {
    TextView txtText;
    TextView txtUser;
    TextView txtVersion;
    TextView txtZeit;
}
}

我想在此代碼中添加項目:

LoadChatData bdl = new LoadChatData(new OnTaskComplete() {
                @Override
                public void onTaskCompleted(ChatListItem[] url, int id) {
                    currid = id;
                    for (ChatListItem i : url) {
                        if (chatList != null) {
                            chatList.add(i);
                        }
                    }
                }
            });

有沒有辦法做到這一點? 問題是我收到此錯誤消息:

02-16 11:17:57.287: W/System.err(24997): java.lang.UnsupportedOperationException
02-16 11:17:57.287: W/System.err(24997):    at java.util.AbstractList.add(AbstractList.java:404)
02-16 11:17:57.287: W/System.err(24997):    at java.util.AbstractList.add(AbstractList.java:425)
02-16 11:17:57.287: W/System.err(24997):    at android.widget.ArrayAdapter.add(ArrayAdapter.java:179)
02-16 11:17:57.287: W/System.err(24997):    at de.tecfriends.vbtsplash2013.ActivityNewChat$3$1.onTaskCompleted(ActivityNewChat.java:108)
02-16 11:17:57.287: W/System.err(24997):    at de.tecfriends.vbtsplash2013.LoadChatData.doInBackground(LoadChatData.java:45)
02-16 11:17:57.287: W/System.err(24997):    at de.tecfriends.vbtsplash2013.LoadChatData.doInBackground(LoadChatData.java:1)
02-16 11:17:57.287: W/System.err(24997):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-16 11:17:57.287: W/System.err(24997):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
02-16 11:17:57.287: W/System.err(24997):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
02-16 11:17:57.287: W/System.err(24997):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
02-16 11:17:57.287: W/System.err(24997):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
02-16 11:17:57.287: W/System.err(24997):    at java.lang.Thread.run(Thread.java:856)

您不應該直接將項目添加到適配器。 將它們添加到傳遞給適配器的數據數組中(當適配器創建時,將此數組傳遞給構造函數),然后調用adapter.notifyDataSetChanged()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM