为什么setVisibility()不在onResumeFragments()中工作?

时间:2014-10-07 15:49:43

标签: android

我遇到一个问题,即在onResumeFragments方法中设置可见性似乎不起作用。这是有问题的活动:

public class MainActivity extends FragmentActivity {

    private ViewGroup activityBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        activityBar = (ViewGroup)findViewById(R.id.activity_bar);
    }

    @Override
    protected void onResumeFragments() {
        if (someCondition) {
            activityBar.setVisibility(View.GONE);
        }
    }
}

活动栏如下所示:

<LinearLayout
    android:id="@+id/activity_bar"
    android:layout_height="@dimen/activity_bar_height"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:background="#AD000000"
    android:layout_alignParentTop="true"
    android:gravity="center_vertical"
    android:visibility="visible"
    >

我已经提取了很多其他细节,但基本上,如果满足给定条件,我想在我的onResumeFragments中隐藏此活动栏。我发现setVisibility似乎没有做任何事情。调用该行后,我可以在activityBar上调用getVisiblity并将其设置为GONE,但它仍会显示在UI中。我也可以将它设置为Y并看到它向下移动到屏幕上。我还仔细检查以确保在主线程中发生这种情况。我有点不知道为什么这不起作用以及最好的解决方法是什么。

2 个答案:

答案 0 :(得分:0)

在处理onStart()和onResume()时,事情会变得有点棘手。例如,您不应该在FragmentActivity的onResume()方法中提交事务,因为在某些情况下可以在活动状态恢复之前调用该方法(有关更多信息,请参阅documentation)。如果您的应用程序需要在除onCreate()之外的Activity生命周期方法中提交事务,请在FragmentActivity#onResumeFragments()或Activity#onPostResume()中执行此操作。因此,只需尝试修改代码,看看它是否适用于onPostResume()。

答案 1 :(得分:0)

事实证明,在我尝试设置其可见性之前,activity_bar已经过动画处理。此票证中包含的信息与我遇到的问题相同,并且具有相同的解决方案。

Why doesn't setVisibility work after a view is animated?