2013-02-16 7 views
0

사용자 지정 어댑터 (ArrayAdapter)가 있고 코드에 항목을 동적으로 추가하려고합니다.사용자 지정 사용자 지정 어댑터가있는 사용자 지정 ListView에 항목 추가

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

그리고이 코드에 항목을 추가 할 :

내 ArrayAdapter와는 다음과 같습니다

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

+0

커스텀 ArrayAdapter ChatList입니다. – Styler2go

답변

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

+0

목록에서 ArrayList로 변경하여 작동합니다. 감사합니다! – Styler2go

관련 문제