【问题标题】:Android - ProgressBar setVisibility to GONE not workingAndroid - ProgressBar setVisibility to GONE 不起作用
【发布时间】:2014-06-21 15:04:09
【问题描述】:

我一直在我的应用程序的片段中添加ProgressBar。我已将其设置为两个主要片段(用作选项卡),如下所示:

ProgressBar in activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />

</RelativeLayout>

设置ProgressBarVISIBLEGONE

spinner = (ProgressBar)getActivity().findViewById(R.id.progressBar1);
spinner.setVisibility(View.VISIBLE);

spinner.setVisibility(View.GONE);

这没有任何问题。我尝试将另一个ProgressBar 添加到另一个具有WebView 的片段中:

ProgressBar in fragment_article.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="info.androidhive.slidingmenu.ArticleFragment$PlaceholderFragment" >

    <WebView android:id="@+id/webPage"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"/>

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />

</RelativeLayout>

设置可见性:

spinner = (ProgressBar)getActivity().findViewById(R.id.progressBar1);
spinner.setVisibility(View.VISIBLE);

spinner.setVisibility(View.GONE);

设置可见性的方式与前面的代码相同,但由于某种原因,这不是将ProgressBar 设置为GONE。不知道怎么回事。

我已经尝试使用clearAnimation,这里建议Android, setVisbility to gone not working in RelativeLayout,但仍然没有。

spinner.clearAnimation();
spinner.setVisibility(View.GONE);

【问题讨论】:

  • 尝试将 id 更改为 R.id.progressBar2
  • 感谢您的建议,作为@Illegal Argument 的回答,我使用的是getActivity 而不是viewInflated

标签: android android-fragments progress-bar android-spinner


【解决方案1】:

检查此代码:

spinner = (ProgressBar)getActivity().findViewById(R.id.progressBar1);

如果你使用的是片段,它应该是这样的:

spinner = (ProgressBar)viewIinflated.findViewById(R.id.progressBar1);//same case with dialogs

如果您正在使用活动,那么:

spinner = (ProgressBar)findViewById(R.id.progressBar1);

【讨论】:

  • 是的,就是这样......事实上,我尝试只是更改片段的 ProgressBar 的 id,结果出现异常,这是有道理的,因为我从 @ 获得了 Progressbar 987654326@ 不是Fragment
  • @j.grima 最初我也这么认为,因为 spinner 是一个类似于下拉菜单的组件,并且您将进度条变量命名为 spinner。快速检查您的代码让我意识到实例化不正确
  • @j.grima 调用 Activity.findViewById 或 View.findViewById 都没有关系,都尝试一下,看看这些方法返回什么,如果它们返回相同的视图(如果你使用它们会返回不同的ID)结果将始终相同
【解决方案2】:

我遇到了同样的问题(progressBar.setVisibility() 不起作用)。

正如@Illegal Argument 所说,

// in Activity
ProgressBar mProgressBar = (ProgressBar)findViewById(R.id.progressBar1);
mProgressBar.setVisibility(View.GONE); 

应该可以工作,如果该代码在 uiThread(mainThread) 上运行。

我的问题是我试图在 uiThread 上运行代码。 所以我通过更改代码解决了这个问题

mProgressBar.setVisibility(View.GONE);

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        mProgressBar.setVisibility(View.GONE);
    }
});

【讨论】:

    【解决方案3】:

    这可能是因为View.GONE 会阻止View 被绘制到屏幕上,而另一个View android:layout_align[POSITION] 组件可能被定义为View,所以它们的位置不能计算出来的。

    View.INVISIBLE 将起作用,因为它只是使其不可见,但 View 仍然存在,如果设置了对齐,其他 View 可以计算它们的位置

    【讨论】:

    • 谢谢,刚刚意识到我从Activity 得到ProgressBar 而不是Fragment
    【解决方案4】:

    这对我有用:

    rootView.findViewById(R.id.progress_bar).setVisibility(View.GONE);
    

    【讨论】:

      【解决方案5】:

      progressBar.setVisibility(ProgressBar.VISIBLE);

      【讨论】:

        猜你喜欢
        • 2017-04-07
        • 2015-08-16
        • 1970-01-01
        • 1970-01-01
        • 2018-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多