2015-04-05 2 views
0

Goal: Если выбран хотя бы один элемент ListView, затухайте кнопкой. Замените кнопку, если элементы не выбраны.ListView не отвечает, если хост LinearLayout animateLayoutChanges является истинным

Задача: Работает, но ListView не реагирует на 1 - 2 секунды после выбора элемента. То есть Я не могу выбрать другие элементы в ListView.

Если я удалю атрибут animateLayoutChanges из LinearLayout, ListView останется отзывчивым.

Вот упрощенный макет:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:animateLayoutChanges="true"> 
<ListView 
    android:id="@+id/category_listview" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_marginLeft="@dimen/activity_horizontal_margin" 
    android:layout_marginRight="@dimen/activity_horizontal_margin" 
    android:layout_marginBottom="@dimen/activity_vertical_margin" 
    android:layout_weight="1" 
    android:background="@drawable/category_list_border" 
    android:choiceMode="multipleChoice" 
    android:divider="@color/material_grey_400" 
    android:dividerHeight="0.5dp" 
    android:padding="0.5dp" /> 
<Button 
    android:id="@+id/study_button" 
    android:visibility="gone" 
    style="?android:attr/borderlessButtonStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:color/white" 
    android:text="@string/study_now" /> 
</LinearLayout> 

А вот код, который устанавливает видимость кнопки:

itemListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View selectedView, int position, long rowId) { 
      Log.d(TAG, "List item selected"); 
      if (itemListView.getCheckedItemCount() == 0) { 
       studyNowButton.setVisibility(View.GONE); 
      } else { 
       studyNowButton.setVisibility(View.VISIBLE); 
      } 

     } 
    }); 

Это происходит в методе onCreateView жизненного цикла фрагмента, если это Соответствующий.

+0

Вы пробовали использовать INVISIBLE вместо GONE. OR Попробуйте установить альфа для кнопок на 0.5f и отключите щелчок. – Mayank

+0

@Mayank Удивительно это работает. Документация заявляет, что я должен иметь возможность использовать View.Gone или View.Invisible. Тем не менее, мне все еще нужна кнопка для развала. –

+0

На самом деле вы не можете. View.GONE делает вид слоеного, как будто его там никогда не было. INVISIBLE - это как установка альфа-значения в 0.0f. Поэтому с View.GONE список должен соответствовать оставшемуся размеру. – Mayank

ответ

0

Вы должны удалить animateLayoutChanges из XML-файла макета. Он пытается применить переход при каждом выборе элемента списка. Вы должны применять переход только тогда, когда выбран первый элемент или все элементы не выбраны.

Вы можете попробовать добавить переход программно с помощью LayoutTransition

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