2010-10-06 52 views
0

我遇到了ListViews的问题。 每次我尝试添加一个项目它首先被证实后,其下面的堆栈帧刷新时出现Android ListView问题

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]  

我第一次添加项目的一切工作正常,但 我的程序FC时,我后面加一个项目到适配器 它首先被显示并触碰它崩溃的设备上的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项目) 你有什么建议吗?这简直让我坚果,因为许多小时=/

回答

0

不知道,但你可以尝试添加:

notifyDataSetChanged(); 

你AddItem方法结束。此方法让适配器知道底层数据已更改,并且需要重新绘制视图。

+0

嗯,感谢您的回答, – Mereep 2010-10-07 11:39:06

0

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

0

嗯,谢谢你的答案。

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

我也叫notifyDataSetChanged,但是在我称之为我的应用程序的那一刻崩溃了。 但Logcat然后告诉我它崩溃了,因为它是从线程 调用它没有创建。 Stackframe并没有提供有用的提示也

所以,我想,它也有问题时发送添加到适配器,而不是创建 从相同的线程,这是一个相当丑陋,无处记录。

因此,我在主类中创建了一个Handler(),以接收来自线程 的消息,并在其自己的上下文中执行任务并且它能够工作。 很多小时丢失导致没有得到正确的错误信息,并在指南中没有提示 ...不错