2013-09-18 3 views
0

У меня есть ListView, где элементы можно удалить щелчком по метке. Этот ListView находится в моем собственном адаптере, который наследует от BaseAdapter. После щелчка на этом ярлыке я вызываю метод, который удаляет элемент из массива данных, хранящегося в моем адаптере.
Каждый элемент содержит некоторые элементы макета и в одном макете TextView. Иногда это мнение должно быть видимым. Но я знаю только, должен ли он быть видимым после раскладки Listview ist! (Я спрашиваю, является ли он эллипсированным). Поэтому я использовал метод post с Runnable.TextView.post Runnable не всегда работает

В моем getView методе я имею следующее заявление: Runnable

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

llMyItem является LinearLayout из элементов в ListView.

lblExpand - это мой TextView, который должен быть видимым или нет.

В первый раз, когда появляется мой просмотр, он отлично работает на Android 4.3. Но на Android 2.1 он не работает.

Ярлык появляется только после того, как я нажал кнопку «Далее» на моем представлении. Незадолго до того, как моя активность закончится, появится текстовое окно. Но это уже слишком поздно! И есть вторая проблема: После того, как я удалил один элемент в своем списке со следующим методом, он не будет работать после того, как я позвоню notifyDataSetChanged. Сразу после касания где-то на экране запускается runnable.

Я думаю, что два вопроса имеют один и тот же корень.

Вот код для метода, который удаляет элемент (я упростил)

public void removeListItem(int position) { 
    //do some animation stuff 
    ArrayList<SomeClass> data = getData(); 
    data.remove (position); 
    notifyDataSetChanged(); 
} 

(«элемент удаления вещь» работает нормально)

Я попробовал его с методом ТЕРЯЕТСЯ на ListView перерисовать его. Но он все еще не работает. Runnable не запускается после завершения компоновки.

Может кто-нибудь мне помочь?

ответ

1

Просто решил!

Вместо добавления Runnable в мой макет я добавил его в обработчик.

Теперь он выглядит так: В моем методе GetView я добавил эту линию

//uiHandler is a private Attribute  
uihandler = new Handler(); 

В моем создать метод, который я называю метод пост на мой новый обработчик

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

Смежные вопросы