方向更改后,Android setVisibility无法正常工作

时间:2017-09-29 21:07:31

标签: android android-layout

我有以下android布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="at.althuber.billy.MainListActivity">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_main_list_recyclereview" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_marginBottom="160dp"
    android:layout_marginRight="@dimen/fab_margin"
    android:src="@android:drawable/ic_menu_edit"
    android:visibility="invisible"
    app:elevation="6dp"
    app:pressedTranslationZ="12dp" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_marginBottom="90dp"
    android:layout_marginRight="@dimen/fab_margin"
    android:src="@android:drawable/ic_menu_camera"
    android:visibility="invisible"
    app:elevation="6dp"
    app:pressedTranslationZ="12dp" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/fab_margin"
    android:visibility="invisible"
    app:srcCompat="@drawable/plus" />

</android.support.design.widget.CoordinatorLayout>

fab在启动时不可见,并在加载所有数据时变为可见。 无论是以横向还是纵向模式启动,这都非常有效。 但是当设备改变方向时,setVisibility()就不再起作用了。

任何想法为什么?

3 个答案:

答案 0 :(得分:0)

听起来就像你在错误的地方调用你的setVisibility一样。您是在onCreate上加载数据还是在onResume上加载数据?然后你在dataLoad完成回调后设置可见性吗?您是否确认在旋转设备时调用了回调函数。您是手动处理轮换还是让Android生命周期从头开始重新创建活动。

无论如何,您只需将setVisible代码移动到加载完成数据检索例程并将数据加载例程移动到生命周期回调中,该回调将在轮换时被点击。

答案 1 :(得分:0)

在Android中,当方向发生变化时,您的活动将被销毁重新创建照常,这意味着该活动会onCreate() -> onStart() -> onResume() -> activity runningActivity lifecycle)。在这种情况下,您应该检查并设置视图的可见性对于两种情况都是相同的(当您第一次开始活动时或者onCreate()onResume()方法中的方向更改时 - &gt ;它取决于你)。

因此,从API级别12开始,还有另一种方法可以保持在方向发生变化时不被破坏的活动。在这里看到这个答案:Android, how to not destroy the activity when I rotate the device?

在做之前你应该仔细阅读,因为它很复杂。

希望有所帮助

答案 2 :(得分:0)

这是我的错。 我在一个保留片段中有一个监听器,在旋转期间重新创建活动时我没有重新连接。 因此,侦听器的操作在旧活动中执行。