我有一个ListView,可以通过单击标签来删除项目。这个ListView在我自己的Adapter中继承自BaseAdapter。单击此标签后,我正在调用一个方法,从我的适配器中存储的数据数组中删除该元素 每个元素都包含一些布局内容,在一个布局中包含TextView。有时这个视图应该是可见的。但是我只知道它是否应该是可见的,在列表视图之后是不可思议的! (我问它是否是椭圆化的)所以我使用了一个带有Runnable的post方法。
在我的getView
方法中,我有以下Runnable语句:
holder.llMyItem.post(new Runnable() {
@Override
public void run() {
if (...) {
holder.lblExpand.setVisibility(View.VISIBLE);
}
}
});
llMyItem
是ListView中项目的LinearLayout。
lblExpand
是我的TextView,应该是可见的。
我的View第一次出现在Android 4.3上运行正常。但是在Android 2.1上它无法正常工作。
仅在我点击视图中的“下一步”按钮后才会显示标签。就在我的活动结束之前,我的Textview将会出现。但那太晚了!
还有第二个问题:
使用以下方法删除列表中的一个项目后,在调用notifyDataSetChanged
后它将无效。在屏幕上某处触摸后,可以开始运行。
我认为这两个问题具有相同的根源。
以下是删除项目的方法的代码(我简化了它)
public void removeListItem(int position) {
//do some animation stuff
ArrayList<SomeClass> data = getData();
data.remove (position);
notifyDataSetChanged();
}
(“删除物品”工作正常)
我尝试使用ListView上的invalidate方法重绘它。但它仍然无法正常工作。布局完成后,Runnable没有启动。
有人能帮助我吗?
答案 0 :(得分:1)
刚刚解决了!
我没有将Runnable添加到我的布局中,而是将其添加到处理程序中。
现在看起来像这样: 在我的getView方法中,我添加了这一行
//uiHandler is a private Attribute
uihandler = new Handler();
在我的create方法中,我在新处理程序上调用post方法
uiHandler.post(new Runnable() {
@Override
public void run() {
if (...){
holder.lblExpand.setVisibility(View.VISIBLE);
}
}
});
我得到的暗示: https://stackoverflow.com/a/4083830/2380896
这个答案高于另一个,有助于理解为什么它并不总是有效: https://stackoverflow.com/a/10457064/2380896