2013-02-16 151 views
0

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

我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) 
+0

什麼是'chatList'類型? – QAMAR 2013-02-16 10:28:56

+0

這是自定義的ArrayAdapter ChatList。 – Styler2go 2013-02-16 10:36:21

回答

2

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

+0

你好。我將類型更改爲List ,但它仍告訴我:''dataarr.add(i)''行中的'java.lang.UnsupportedOperationException'。 Thye dataarr的定義如下:'public java.util.List dataarr = null;'由dataarr = Arrays.asList(data)設置;'其中數據爲ChatListItem [] data' – Styler2go 2013-02-16 10:43:05

+0

我有它通過將其從List更改爲ArrayList來工作,謝謝! – Styler2go 2013-02-16 10:51:22