【问题标题】:Changing visibility of Android ProgressBar更改 Android ProgressBar 的可见性
【发布时间】:2017-08-04 08:09:11
【问题描述】:

我有一个条件检查来决定ProgressBar 是否应该出现。布局如下所示,ProgressBar 包含在 RelativeLayout 中:

<RelativeLayout
    android:id="@+id/someID"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <ProgressBar
        android:id="@+id/someProgressBar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminate="true"
        />

</RelativeLayout>

在片段中:

 ProgressBar progressBar;

 @Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup   container,
                         @Nullable Bundle savedInstanceState) {
 View root = inflater.inflate(R.layout.some_main_layout, container, false);
 progressBar =(ProgressBar) root.findViewById(R.id.someProgressBar);
 ....

}

我以编程方式尝试使用setVisibility() 函数更改进度条的可见性,例如:

   if(someCondition)
       progressBar.setVisibility(View.GONE);
   else
       progressBar.setVisibility(View.VISIBLE);

但上述方法永远不会奏效。因此,我尝试通过添加 android:visibility="gone" 将初始可见性设置为 GONE 状态在 xml 级别进行更改,但我再次迷失了如何使 ProgressBar 可见。

感谢您对此的看法。

谢谢。

【问题讨论】:

  • 这意味着您必须检查您的状况。满足吗?
  • @Piyush :我刚刚给出了代码的基本结构。我确定条件有效(通过调试)。
  • @vardhinisuresh27 只需检查您是否设置了正确进度条的可见性,您将进度条初始化为 someProgressBar 并将可见性设置为 progressBar 。还可以尝试将您的进度条更改为全局变量并查看。
  • @Redman 谢谢。我已经编辑了帖子。我只有一个进度条,它在我的代码中被声明为全局变量。
  • @vardhinisuresh27 你的问题解决了吗??

标签: android visibility android-progressbar


【解决方案1】:

问题是您为进度条使用了错误的 ID。

ProgressBar someProgressBar=(ProgressBar) root.findViewById(R.id.someProgressBar);

   if(someCondition)
       someProgressBar.setVisibility(View.GONE);
   else
       someProgressBar.setVisibility(View.VISIBLE);

并更改进度条的 xml 代码。如果您希望默认隐藏进度条,则保持原样,否则从 xml 中删除可见性。

【讨论】:

    【解决方案2】:

    你可以试试这个希望对你有帮助。

    ProgressBar someProgressBar;
    TextView txtSend;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        txtSend = (TextView) findViewById(R.id.txtSend);
        someProgressBar = (ProgressBar) findViewById(R.id.someProgressBar);
        someProgressBar.setVisibility(View.GONE);
    
        txtSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    
                if (someProgressBar.getVisibility() == View.GONE) {
                    someProgressBar.setVisibility(View.VISIBLE);
                } else {
                    someProgressBar.setVisibility(View.GONE);
                }
            }
        });
    

    【讨论】:

      【解决方案3】:

      用下面的代码替换你的代码,

      if(someCondition)
         progressBar.setVisibility(View.INVISIBLE);
       else
         progressBar.setVisibility(View.VISIBLE);
      

      【讨论】:

      • 你并没有太大的改变,它不会有任何区别。隐形只会占用空间即使去。看看this
      • 是的,我有同样的问题,有时相对布局会产生这个问题。是的,但它会占用布局中的空间。
      • @KeyurThumar 这没有帮助。
      • @vardhinisuresh27 请添加您的完整布局代码。或尝试将父布局更改为线性布局。试试看吧。
      • @KeyurThumar 将父级从 RelativeLayout 更改为 LinearLayout 没有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 2023-03-23
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多