我对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的项目) 你有什么建议吗?它让我疯了很多小时= /
答案 0 :(得分:0)
不确定,但您可以尝试添加:
notifyDataSetChanged();
在AddItem方法的末尾。此方法允许适配器知道基础数据已更改,并且需要重新绘制视图。
答案 1 :(得分:0)
扩展ArrayAdapter而不是BaseAdapter。然后使用其add(Object o)
函数,您当前正在使用AddItem()
函数。它应该为您处理更新视图。
答案 2 :(得分:0)
好的,谢谢你的答案。
我尝试更改为ListAdapter,但这只是相同的结果。
我也调用了notifyDataSetChanged,但是当我把它称为应用程序时,它就崩溃了。 但Logcat然后告诉我它崩溃了,因为它是从线程调用的 它没有创建。 Stackframe也没有提供有用的提示
所以,我猜,在向未创建的适配器发送添加时,它也存在问题 来自同一个线程,这是一个非常丑陋,没有记录。
所以我在mainclass中创建了一个Handler()来接收来自Thread的消息 并在自己的上下文中完成任务,并且它有效。 许多小时丢失导致无法获得正确的错误消息和没有提示 在导游...很好