Search code examples
androidprogress-bar

Android progressBar not showing


I have a progressbar that is supposed to run in an AsyncTask , but it is not appearing, although the task runs

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:background="@drawable/splashportrait">
<ProgressBar android:layout_alignParentBottom="true" android:indeterminate="true"
    android:layout_centerHorizontal="true" android:paddingBottom="450dip"
    android:layout_width="200dip" android:layout_height="200dip"
    android:id="@+id/progressBar1"></ProgressBar>
</RelativeLayout>

CODE:

ProgressBar diagProgress;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splashscreen);

    diagProgress = (ProgressBar)findViewById(R.id.progressBar1);
    DiagnosticsTask diag = new DiagnosticsTask();
    diag.execute();

  /**rest of class ommitted here**/
}

private class DiagnosticsTask extends AsyncTask<String, String, Boolean> {

    //Show spinner
    protected void onPreExecute() {
        //dialog.setMessage("Loading corresponding destinations...");
        //dialog.show();
        diagProgress.setVisibility(View.VISIBLE);
        diagProgress.showContextMenu();
        Log.e("AsyncStatus", "spinner shown");
    }
 /*other parts of the thread ommitted here*/

}

Solution

  • Try this replace your ProgressBar with the one below.

    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:indeterminate="true"
        />
    

    Let me know if it works, I would explain the rationale.

    Rationale: Now I am putting your code below for ProgressBar

    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_width="200dip"
        android:layout_height="200dip"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:indeterminate="true"
        android:paddingBottom="450dip"
        />
    

    RelativeLayout allows you Z-ordering. So since you needed ProgressBar on top you need not do the kind of manipulations you are doing.

    android:layout_alignParentBottom="true"  
    

    This sets the Progress Bar at the botton of the layout:

    android:paddingBottom="450dip" android:layout_width="200dip" android:layout_height="200dip"
    

    All the three values here are absolute which is a strict no-no as far as Android is concerned. Most Likely your paddingBottom was pushing your ProgressBar out of View. As your padding is greater than the actual width/height of the control

    As a thumb rule always use relative values for it to work on all the devices and form factors.

    Let me know if this makes sense.