1

我有一个 ListView 可以通过单击标签来删除项目。这个 ListView 在我自己的继承自 BaseAdapter 的适配器中。单击此标签后,我将调用一个从存储在我的适配器中的数据数组中删除元素的方法。
每个元素都包含一些 Layout 的东西,并且在一个 Layout 中包含一个 TextView。有时这个视图应该是可见的。但我只知道它是否应该在 Listview ist layoutet 之后可见!(我在问它是否是椭圆形的)所以我使用了带有 Runnable 的 post 方法。

在我的getView方法中,我有以下 Runnable 语句:

holder.llMyItem.post(new Runnable() {
  @Override
  public void run() {
     if (...) { 
         holder.lblExpand.setVisibility(View.VISIBLE);
     }
   }
});

llMyItem是 ListView 中项目的 LinearLayout。

lblExpand是我的 TextView 是否应该可见。

我的视图第一次出现时,它在 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 未启动。

有谁能够帮我?

4

1 回答 1

2

刚刚解决了!

我没有将 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

于 2013-09-19T05:51:57.250 回答