Android 切换ListViews可见性会导致滚动问题
我尝试在一个地方设置两个ListView,一次只能看到其中一个。(这是使用setVisibility(View.GONE)以编程方式设置的) 在第二个ListView可见并消失后,第一个ListView不会滚动。我做了一些测试,发现第二个ListView的onScrollListener总是捕获事件。 你知道我如何设置它吗?可见ListView的onScrollListener总是捕获事件? 我已经尝试了requestFocus(),但它不起作用 下面是代码中的一些代码:Android 切换ListViews可见性会导致滚动问题,android,listview,scroll,visibility,Android,Listview,Scroll,Visibility,我尝试在一个地方设置两个ListView,一次只能看到其中一个。(这是使用setVisibility(View.GONE)以编程方式设置的) 在第二个ListView可见并消失后,第一个ListView不会滚动。我做了一些测试,发现第二个ListView的onScrollListener总是捕获事件。 你知道我如何设置它吗?可见ListView的onScrollListener总是捕获事件? 我已经尝试了requestFocus(),但它不起作用 下面是代码中的一些代码: public void
public void toggle_services(View v) {
if (home_services_detail.isShown()) {
AnimationHelper.slide_up(this, home_services_detail);
home_services_detail.setVisibility(View.GONE);
} else {
home_services_detail.setVisibility(View.VISIBLE);
AnimationHelper.slide_down(this, home_services_detail);
home_services_detail.requestFocus();
}
if (mobile_services_detail.isShown()) {
AnimationHelper.slide_up(this, mobile_services_detail);
mobile_services_detail.setVisibility(View.GONE);
} else {
mobile_services_detail.setVisibility(View.VISIBLE);
AnimationHelper.slide_down(this, mobile_services_detail);
home_services_detail.requestFocus();
}
}
布局如下:
<LinearLayout
android:orientation="vertical"
android:layout_width="775dp"
android:layout_height="match_parent">
<!-- activity_info layout file -->
<!-- Clickable title -->
<TextView
android:id="@+id/home_services_title"
android:text="@string/home_services"
android:clickable="true"
android:onClick="toggle_services"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center|center_vertical|center_horizontal"
style="@style/THeader"/>
<!--content to hide/show -->
<LinearLayout
android:id="@+id/home_services_detail"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp"
android:weightSum="1">
<TextView
android:id="@+id/fees_header"
android:layout_width="0dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:text="@string/fees"
android:layout_weight="0.91"
android:gravity="center|center_vertical|center_horizontal"/>
<TextView
android:id="@+id/addons_header"
android:layout_width="360dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:gravity="center|center_vertical|center_horizontal"
android:text="@string/addons"/>
</LinearLayout>
<ListView
android:id="@+id/homeServicesList"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:listSelector="@android:color/transparent"
android:cacheColorHint="#00000000"
android:dividerHeight="0dp"
android:divider="@null"/>
</LinearLayout>
<TextView
android:id="@+id/mobile_services_title"
android:text="@string/mobile_services"
android:clickable="true"
android:onClick="toggle_services"
android:layout_width="match_parent"
android:layout_weight="5.6"
android:layout_gravity="bottom"
style="@style/THeader"
android:gravity="center|center_vertical|center_horizontal"
android:layout_height="fill_parent"
android:maxHeight="50dp"/>
<!--content to hide/show -->
<LinearLayout
android:id="@+id/mobile_services_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp"
android:weightSum="1">
<TextView
android:id="@+id/mobile_fees_header"
android:layout_width="0dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:text="@string/fees"
android:layout_weight="0.91"
android:gravity="center|center_vertical|center_horizontal"/>
<TextView
android:id="@+id/mobile_addons_header"
android:layout_width="360dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:gravity="center|center_vertical|center_horizontal"
android:text="@string/addons"/>
</LinearLayout>
<ListView
android:id="@+id/mobileServicesList"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:listSelector="@android:color/transparent"
android:cacheColorHint="#00000000"
android:dividerHeight="0dp"
android:divider="@null"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="775dp"
android:layout_height="match_parent">
<!-- activity_info layout file -->
<!-- Clickable title -->
<LinearLayout
android:id="@+id/homServicesLinearLayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<TextView
android:id="@+id/home_services_title"
android:text="@string/home_services"
android:clickable="true"
android:onClick="toggle_services"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center|center_vertical|center_horizontal"
style="@style/THeader"/>
<!--content to hide/show -->
<LinearLayout
android:id="@+id/home_services_detail"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp"
android:weightSum="1">
<TextView
android:id="@+id/fees_header"
android:layout_width="0dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:text="@string/fees"
android:layout_weight="0.91"
android:gravity="center|center_vertical|center_horizontal"/>
<TextView
android:id="@+id/addons_header"
android:layout_width="360dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:gravity="center|center_vertical|center_horizontal"
android:text="@string/addons"/>
</LinearLayout>
<ListView
android:id="@+id/homeServicesList"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:listSelector="@android:color/transparent"
android:cacheColorHint="#00000000"
android:dividerHeight="0dp"
android:divider="@null"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/mobileServicesLinearLayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="9.5">
<TextView
android:id="@+id/mobile_services_title"
android:text="@string/mobile_services"
android:clickable="true"
android:onClick="toggle_services"
android:layout_width="match_parent"
style="@style/THeader"
android:gravity="center|center_vertical|center_horizontal"
android:layout_height="wrap_content"
android:maxHeight="50dp"/>
<!--content to hide/show -->
<LinearLayout
android:id="@+id/mobile_services_detail"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp"
android:weightSum="1">
<TextView
android:id="@+id/mobile_fees_header"
android:layout_width="0dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:text="@string/fees"
android:layout_weight="0.91"
android:gravity="center|center_vertical|center_horizontal"/>
<TextView
android:id="@+id/mobile_addons_header"
android:layout_width="360dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:gravity="center|center_vertical|center_horizontal"
android:text="@string/addons"/>
</LinearLayout>
<ListView
android:id="@+id/mobileServicesList"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:listSelector="@android:color/transparent"
android:cacheColorHint="#00000000"
android:dividerHeight="0dp"
android:divider="@null"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
我设法解决了这个问题。我不知道为什么在能见度改变的情况下会有奇怪的行为,所以毕竟我做了一个变通。 在代码中,以前存在可见性改变,现在我从父级中删除不应该出现在屏幕上的布局,并添加应该可见的布局。现在,两个列表视图都可以完美地工作。我认为它比可见性设置慢一点,但它可以工作。 必须始终在屏幕上显示两个标题(移动服务标题和家庭服务标题),这就是以编程方式设置布局参数的原因 切换功能:
public void toggle_services(View v){
LinearLayout.LayoutParams bigWieght=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 11f);
LinearLayout.LayoutParams smallWieght=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1f);
if(isHomeVisible){
AnimationHelper.slide_up(this, home_services_detail);
homeServicesLinearLayout.removeView(home_services_detail);
homeServicesLinearLayout.setLayoutParams(bigWieght);
mobileServicesLinearLayout.addView(mobile_services_detail);
AnimationHelper.slide_down(this, mobile_services_detail);
mobileServicesLinearLayout.setLayoutParams(smallWieght);
} else {
AnimationHelper.slide_up(this, mobile_services_detail);
mobileServicesLinearLayout.removeView(mobile_services_detail);
mobileServicesLinearLayout.setLayoutParams(bigWieght);
homeServicesLinearLayout.addView(home_services_detail);
AnimationHelper.slide_down(this, home_services_detail);
homeServicesLinearLayout.setLayoutParams(smallWieght);
}
isHomeVisible=!isHomeVisible;
}
布局如下:
<LinearLayout
android:orientation="vertical"
android:layout_width="775dp"
android:layout_height="match_parent">
<!-- activity_info layout file -->
<!-- Clickable title -->
<TextView
android:id="@+id/home_services_title"
android:text="@string/home_services"
android:clickable="true"
android:onClick="toggle_services"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center|center_vertical|center_horizontal"
style="@style/THeader"/>
<!--content to hide/show -->
<LinearLayout
android:id="@+id/home_services_detail"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp"
android:weightSum="1">
<TextView
android:id="@+id/fees_header"
android:layout_width="0dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:text="@string/fees"
android:layout_weight="0.91"
android:gravity="center|center_vertical|center_horizontal"/>
<TextView
android:id="@+id/addons_header"
android:layout_width="360dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:gravity="center|center_vertical|center_horizontal"
android:text="@string/addons"/>
</LinearLayout>
<ListView
android:id="@+id/homeServicesList"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:listSelector="@android:color/transparent"
android:cacheColorHint="#00000000"
android:dividerHeight="0dp"
android:divider="@null"/>
</LinearLayout>
<TextView
android:id="@+id/mobile_services_title"
android:text="@string/mobile_services"
android:clickable="true"
android:onClick="toggle_services"
android:layout_width="match_parent"
android:layout_weight="5.6"
android:layout_gravity="bottom"
style="@style/THeader"
android:gravity="center|center_vertical|center_horizontal"
android:layout_height="fill_parent"
android:maxHeight="50dp"/>
<!--content to hide/show -->
<LinearLayout
android:id="@+id/mobile_services_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp"
android:weightSum="1">
<TextView
android:id="@+id/mobile_fees_header"
android:layout_width="0dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:text="@string/fees"
android:layout_weight="0.91"
android:gravity="center|center_vertical|center_horizontal"/>
<TextView
android:id="@+id/mobile_addons_header"
android:layout_width="360dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:gravity="center|center_vertical|center_horizontal"
android:text="@string/addons"/>
</LinearLayout>
<ListView
android:id="@+id/mobileServicesList"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:listSelector="@android:color/transparent"
android:cacheColorHint="#00000000"
android:dividerHeight="0dp"
android:divider="@null"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="775dp"
android:layout_height="match_parent">
<!-- activity_info layout file -->
<!-- Clickable title -->
<LinearLayout
android:id="@+id/homServicesLinearLayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<TextView
android:id="@+id/home_services_title"
android:text="@string/home_services"
android:clickable="true"
android:onClick="toggle_services"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center|center_vertical|center_horizontal"
style="@style/THeader"/>
<!--content to hide/show -->
<LinearLayout
android:id="@+id/home_services_detail"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp"
android:weightSum="1">
<TextView
android:id="@+id/fees_header"
android:layout_width="0dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:text="@string/fees"
android:layout_weight="0.91"
android:gravity="center|center_vertical|center_horizontal"/>
<TextView
android:id="@+id/addons_header"
android:layout_width="360dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:gravity="center|center_vertical|center_horizontal"
android:text="@string/addons"/>
</LinearLayout>
<ListView
android:id="@+id/homeServicesList"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:listSelector="@android:color/transparent"
android:cacheColorHint="#00000000"
android:dividerHeight="0dp"
android:divider="@null"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/mobileServicesLinearLayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="9.5">
<TextView
android:id="@+id/mobile_services_title"
android:text="@string/mobile_services"
android:clickable="true"
android:onClick="toggle_services"
android:layout_width="match_parent"
style="@style/THeader"
android:gravity="center|center_vertical|center_horizontal"
android:layout_height="wrap_content"
android:maxHeight="50dp"/>
<!--content to hide/show -->
<LinearLayout
android:id="@+id/mobile_services_detail"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp"
android:weightSum="1">
<TextView
android:id="@+id/mobile_fees_header"
android:layout_width="0dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:text="@string/fees"
android:layout_weight="0.91"
android:gravity="center|center_vertical|center_horizontal"/>
<TextView
android:id="@+id/mobile_addons_header"
android:layout_width="360dp"
style="@style/fees_addons"
android:layout_height="match_parent"
android:gravity="center|center_vertical|center_horizontal"
android:text="@string/addons"/>
</LinearLayout>
<ListView
android:id="@+id/mobileServicesList"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:listSelector="@android:color/transparent"
android:cacheColorHint="#00000000"
android:dividerHeight="0dp"
android:divider="@null"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>