2015-04-05 37 views
0

目標:如果至少選擇了一個ListView項目,則淡入按鈕。如果沒有選擇項目,淡出按鈕。當主機LinearLayout animateLayoutChanges爲真時,ListView無響應

問題:它正在工作,但ListView在選擇項目後1-2秒內無響應。即我無法在ListView中選擇其他項目。

如果我從LinearLayout中刪除animateLayoutChanges屬性,則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

您是否嘗試過用無形的,而不是消失。 或 嘗試將按鈕的alpha設置爲0.5f並禁用點擊。 – Mayank 2015-04-05 05:21:08

+0

@Mayank令人驚訝的是這個工程。文檔聲明我應該能夠使用View.Gone或View.Invisible。但是,我仍然需要按鈕來摺疊。 – 2015-04-05 05:27:48

+0

其實你不能。 View.GONE可以讓視圖變得像以前一樣。 INVISIBLE就像將alpha設置爲0.0f。所以隨着View.GONE列表必須適應剩餘的大小。 – Mayank 2015-04-05 05:34:16

回答

0

您應該從佈局XML文件中移除animateLayoutChanges。它會在您每次選擇列表項目時嘗試應用轉換。只有在選擇第一個項目或取消選擇所有項目時,才應用轉場。

你可以嘗試添加以編程方式使用LayoutTransition

0

變化的過渡View.GONEView.INVISIBLE