当主机LinearLayout animateLayoutChanges为true时,ListView无响应

时间:2015-04-05 04:56:04

标签: android

目标:如果选择了至少一个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生命周期方法中发生这种情况。

2 个答案:

答案 0 :(得分:0)

您应该从布局XML文件中删除animateLayoutChanges。每次选择列表项时,它都会尝试应用转换。只有在选择第一个项目或取消选择所有项目时,才应应用转换。

您可以尝试使用LayoutTransition

以编程方式添加转场

答案 1 :(得分:0)

View.GONE更改为View.INVISIBLE