web-dev-qa-db-ja.com

Android --ProgressBar setVisibility to GONE notworking

アプリのフラグメントにProgressBarを追加しています。次のように、2つの主要なフラグメント(タブとして使用)に設定しました。

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);

前のコードと同じ方法で可視性を設定しますが、何らかの理由でこれはProgressBarGONEに設定していません。何が悪いのかわからない。

ここで提案されているようにclearAnimationを使用してみました Android、setVisbilityがRelativeLayoutで機能しなくなりました ですが、まだ何もありません。

spinner.clearAnimation();
spinner.setVisibility(View.GONE);
10
j.grima

このコードを確認してください:

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

フラグメントを使用している場合は、次のようになります。

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

アクティビティを使用している場合:

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

同じ問題が発生しました(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);
    }
});
2
KevinRyu

おそらくView.GONEは、Viewが画面に描画されないようにし、別のViewAndroid:layout_align[POSITION]コンポーネントはそのViewに定義されている可能性があるため、それらの位置を計算することはできません。

View.INVISIBLEは機能するため、非表示になりますが、Viewはまだ存在し、他のViewは、位置合わせが設定されている場合、位置を計算できます。