刷新时的Android ListView问题

时间:2010-10-06 16:02:43

标签: android android-widget

我对ListViews有疑问。 我每次尝试在首次显示项目后添加项目, 我的程序FC有以下堆栈框架

Thread [<3> main] (Suspended (exception IllegalStateException))    
ListView.layoutChildren() line: 1603    
AbsListView$CheckForTap.run() line: 1827    
ViewRoot(Handler).handleCallback(Message) line: 587    
ViewRoot(Handler).dispatchMessage(Message) line: 92    
Looper.loop() line: 123    
ActivityThread.main(String[]) line: 4363    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]    
Method.invoke(Object, Object...) line: 521    
ZygoteInit$MethodAndArgsCaller.run() line: 860    
ZygoteInit.main(String[]) line: 618    
NativeStart.main(String[]) line: not available [native method]    

我第一次添加项目时一切正常,但是当我向适配器添加项目时 首次显示并触摸设备上的ListView后,它会崩溃。

我使用以下适配器

public class Adapterclass extends BaseAdapter{
//Adapter for Chatview...

private Context con;
private int count = 0;
private List<String>messages;

@Override
public int getCount() {
    return count;
}

@Override
public Object getItem(int position) {
    return messages.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    TextView txt = new TextView(con);
    txt.setText(Html.fromHtml(messages.get(position)));
    return txt;
}

public void AddItem(String item){
    messages.add(item);
    count++;

}

Adapterclass(Context con){
    this.con = con;
    messages = new ArrayList<String>();

}

}

(添加我调用AddItem的项目) 你有什么建议吗?它让我疯了很多小时= /

3 个答案:

答案 0 :(得分:0)

不确定,但您可以尝试添加:

notifyDataSetChanged();

在AddItem方法的末尾。此方法允许适配器知道基础数据已更改,并且需要重新绘制视图。

答案 1 :(得分:0)

扩展ArrayAdapter而不是BaseAdapter。然后使用其add(Object o)函数,您当前正在使用AddItem()函数。它应该为您处理更新视图。

答案 2 :(得分:0)

好的,谢谢你的答案。

我尝试更改为ListAdapter,但这只是相同的结果。

我也调用了notifyDataSetChanged,但是当我把它称为应用程序时,它就崩溃了。 但Logcat然后告诉我它崩溃了,因为它是从线程调用的 它没有创建。 Stackframe也没有提供有用的提示

所以,我猜,在向未创建的适配器发送添加时,它也存在问题 来自同一个线程,这是一个非常丑陋,没有记录。

所以我在mainclass中创建了一个Handler()来接收来自Thread的消息 并在自己的上下文中完成任务,并且它有效。 许多小时丢失导致无法获得正确的错误消息和没有提示 在导游...很好