Common Progress bar in every activity Android

﹥>﹥吖頭↗ 提交于 2021-02-07 08:27:51

问题


I have modify the solution. I am able to get the progress bar but the progress bar never gets hide

Here is class to create a progress bar with relative layout

public class ProgressBarHandler {
    private ProgressBar mProgressBar;
    private Context mContext;
    private View _baseView;
    private View _hideView;
    public ProgressBarHandler(Context context,View baseView, View hideView) {
        mContext = context;
        _baseView = baseView;
        _hideView = hideView;

        ViewGroup layout = (ViewGroup) _baseView;//((Activity) context).findViewById(android.R.id.content).getRootView();

        mProgressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleLarge);
        mProgressBar.setIndeterminate(true);

        RelativeLayout.LayoutParams params = new
                RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);

        RelativeLayout rl = new RelativeLayout(context);

        rl.setGravity(Gravity.CENTER);
        rl.addView(mProgressBar);

        layout.addView(rl, params);

        hide();
    }

    public void show() {
        mProgressBar.setVisibility(View.VISIBLE);
        _hideView.setVisibility(View.INVISIBLE);
    }

    public void hide() {
        mProgressBar.setVisibility(View.INVISIBLE);
        _hideView.setVisibility(View.VISIBLE);
    }
}

This is my xml file

<FrameLayout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true"
    android:orientation="vertical"
    android:id="@+id/profile_activity">


<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
    android:id="@+id/layout_to_hide"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:expandedTitleTextAppearance="@android:color/transparent"
        app:contentScrim="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@mipmap/wallpaper"
                android:orientation="vertical">

                <com.deerwalk.androidcommon.RoundedImageView
                    android:id="@+id/profile_image"
                    android:layout_width="100dp"
                    app:civ_border_color="#EEEEEE"
                    app:civ_border_width="4dp"
                    app:civ_shadow="true"
                    app:civ_shadow_radius="10"
                    app:civ_shadow_color="#8BC34A"
                    android:layout_height="100dp"
                    android:layout_alignWithParentIfMissing="false"
                    android:layout_centerInParent="true"
                    android:layout_gravity="center"
                    android:layout_margin="20dp"
                    android:src="@drawable/avatar" />

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:layout_below="@+id/profile_image"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:id="@+id/txt_name"
                        android:layout_gravity="center_horizontal"
                        android:text=""
                        android:textColor="@color/white" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:id="@+id/txt_dob"
                        android:layout_gravity="center_horizontal"
                        android:text=""
                        android:layout_marginTop="5dp"
                        android:textColor="@color/white" />
                </LinearLayout>
            </RelativeLayout>



        </LinearLayout>
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>


<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">


</android.support.v7.widget.RecyclerView>

</android.support.design.widget.CoordinatorLayout>
</FrameLayout>

Here is the activity class which call the progress bar

public class ProfileActivity extends AppCompatActivity {

    FrameLayout profile_root_layout;
    CoordinatorLayout layot_to_hide;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);
        profile_root_layout = (FrameLayout) findViewById(R.id.profile_activity);
        layot_to_hide = (CoordinatorLayout) findViewById(R.id.layout_to_hide);
         new userProfileTask().execute();
    }




    public class userProfileTask extends AsyncTask<Void, Void, Boolean> {
        @Override
        protected void onPreExecute() {
            new ProgressBarHandler(getBaseContext(),profile_root_layout,layot_to_hide).show();
            super.onPreExecute();
        }

        @Override
        protected Boolean doInBackground(Void... params) {
            try {
                Thread.sleep(2000);

            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(Boolean aBoolean) {

            new ProgressBarHandler(getBaseContext(),profile_root_layout,layot_to_hide).hide();
        }
    }

}

The progress bar never gets hides.Where I am doing mistake.


回答1:


Make a separate class then make a static method with the parameter on it the parameter contain Activity ... call this method on ur activity and pass the Activity name in it




回答2:


Its very simple, you can do in multiple ways. 1) You can define base activity and write your code for progress dialog and extends all activity from BaseActivity used Progressdialog. 2) You can have custom separate class and used in all activities. etc

Here is good example you can modify your code like this example. ProgressHud

Or use this too.




回答3:


I would suggest create a dialog and call in your activity class like this

dialog = new Dialog(getActivity(), android.R.style.Theme_Black);
    View views = LayoutInflater.from(getActivity()).inflate(R.layout.activity_dialog, null);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setBackgroundDrawableResource(R.color.feed_item_bg);
    dialog.setContentView(views);
    dialog.show();

and in your async task onPostExecute dismiss dialog

dialog.dismiss();



回答4:


public static void getProgress(Activity activity,FrameLayout relativeLayout){
final ProgressBar pb;
int progressStatus = 0;
final Handler handler = new Handler();
pb = new ProgressBar(activity, null, android.R.attr.progressBarStyleHorizontal);
LayoutParams lp = new LayoutParams(550,LayoutParams.WRAP_CONTENT);
pb.setLayoutParams(lp);
LayoutParams params = (LayoutParams) pb.getLayoutParams();
pb.setLayoutParams(params);
pb.getProgressDrawable().setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_IN);
relativeLayout.addView(pb);
new Thread(new Runnable() {
@Override
public void run() {
int progressStatus = 0;
while(progressStatus < 100){
progressStatus +=1;
try{
Thread.sleep(20);
}catch(InterruptedException e){
e.printStackTrace();
}
final int finalProgressStatus = progressStatus;
handler.post(new Runnable() {
@Override
public void run() {
pb.setProgress(finalProgressStatus);
}
});
}
}
}).start(); // Start the operation
}



回答5:


You could use a parent Activity. This activity class extends AppCompatActivity . Other Activities will extend this Activity. For example the name of this activity is AbstractActivty.

public class  AbstractActivty extends AppCompatActivity{

      AlertDialog alertDialogProgressBar;

      public void showLoadingProgressBar(String message, boolean cancalable) {
        if (isActivityPaused)
            return;

          AlertDialog.Builder adb = new AlertDialog.Builder(this);
          View view = getLayoutInflater().inflate(R.layout.alert_dialog_progressbar_layout,null);
          TextView tv = (TextView) view.findViewById(R.id.idTextViewMessage);
          tv.setText(message);
          adb.setView(view);
          alertDialogProgressBar = adb.create();
          alertDialogProgressBar.setCancelable(cancalable);
          alertDialogProgressBar.show();
}

 public void closeProgressBar() {
        if (alertDialogProgressBar == null) {
            return;
        }
        alertDialogProgressBar.hide();
    }

}

This class have a method which could be called by any other activity that extends AbstractActivty

class MainActivty extends AbstractActivty{
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // when require to show progressbar
        showLoadingProgressBar("Loading....",true)

        // when required to hide call
        closeProgressBar();

 }

}    

Note in Alert Dialog we have used a custom layout "alert_dialog_progressbar_layout.xml"

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="@dimen/text_padding_l">


    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guidelineVertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent=".3"
        />


    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/guidelineVertical"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

    <TextView
        android:id="@+id/idTextViewMessage"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Loading...."
        android:textColor="@color/colorPrimary"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/guidelineVertical"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Hope this will be of help . Thank you.



来源:https://stackoverflow.com/questions/36052732/common-progress-bar-in-every-activity-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!