【问题标题】:How to make Progress bar in singleton class in android如何在android的单例类中制作进度条
【发布时间】:2017-08-19 16:59:58
【问题描述】:

我有一个单独布局的进度条,我想在单例类中实现进度条,并在所有框架中使用单例类的方法。我该怎么做。

这是我的progressbar.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="wrap_content"
            android:layout_height="65dp"
            android:background="#43A6F3"
            android:orientation="vertical">

<TextView
    android:id="@+id/progress_text"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:layout_above="@+id/progress_bar"
    android:layout_marginLeft="10dp"
    android:layout_marginStart="10dp"
    android:background="@android:color/transparent"
    android:gravity="center_vertical"
    android:text=""
    android:textColor="@android:color/white"
    android:textSize="16sp"
    android:visibility="gone" />

<ProgressBar
    android:id="@+id/progress_bar"
    style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Horizontal"
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_gravity="center"
    android:background="#FFFF"
    android:maxHeight="20dp"
    android:minHeight="20dp" />

这是我的单身课程

public class CShowProgress {
public static CShowProgress s_m_oCShowProgress;
public static Context m_Context;
public Dialog m_Dialog;
public ProgressBar m_ProgressBar;

public CShowProgress(Context m_Context) {
    this.m_Context = m_Context;

}

public static CShowProgress getInstance() {
    if (s_m_oCShowProgress == null) {
        s_m_oCShowProgress = new CShowProgress(m_Context);
    }
    return s_m_oCShowProgress;
}

public void showProgress(String message) {
    m_Dialog = new Dialog(m_Context);
    m_Dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    m_Dialog.setContentView(R.layout.progress_bar);
    m_ProgressBar = (ProgressBar) m_Dialog.findViewById(R.id.progress_bar);
    TextView progressText = (TextView) m_Dialog.findViewById(R.id.progress_text);
    progressText.setText("" + message);
    progressText.setVisibility(View.VISIBLE);
    m_ProgressBar.setVisibility(View.VISIBLE);
    m_ProgressBar.setIndeterminate(true);
    m_Dialog.setCancelable(false);
    m_Dialog.setCanceledOnTouchOutside(false);
    m_Dialog.show();
}

这是我必须使用 showProgress() 的片段/活动

protected void onPreExecute() {
        super.onPreExecute();

        CShowProgress.getInstance.showProgress("Please wait while Loading Deals...");
    }

【问题讨论】:

  • 你遇到的实际问题是什么?
  • 我看到它应该工作的代码只是需要更正。
  • 当我在片段中使用 showProgress 方法时出现错误
  • 错误:java.lang.NullPointerException
  • 如果你的构造函数是公共的,那么你的类就不是单例了。 :)

标签: android


【解决方案1】:

我的单身ProgressDialog

public class ProgressDialog {
    private Dialog dialog;
    private static ProgressDialog mInstance;

    public static synchronized ProgressDialog getInstance() {
        if (mInstance == null) {
            mInstance = new ProgressDialog();
        }
        return mInstance;
    }

    public void show(Context context) {
        if (dialog != null && dialog.isShowing()) {
            return;
        }
        dialog = new Dialog(context);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.layout_progress_dialog);
        dialog.setCancelable(false);
        dialog.show();
    }

    public void dismiss() {
       if (dialog != null && dialog.isShowing()) {
          dialog.dismiss();
       }
    }
}

【讨论】:

    【解决方案2】:
    public class CShowProgress {
    public static CShowProgress s_m_oCShowProgress;
    
    public Dialog m_Dialog;
    private ProgressBar m_ProgressBar;
    private Context context;
    
    private CShowProgress(Context context) {
        this.context = context;
    
    }
    
    public static CShowProgress getInstance() {
        if (s_m_oCShowProgress == null) {
            s_m_oCShowProgress = new CShowProgress(m_Context);
        }
        return s_m_oCShowProgress;
    }
    
    public void showProgress(Context m_Context,String message) {
        m_Dialog = new Dialog(m_Context);
        m_Dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        m_Dialog.setContentView(R.layout.progress_bar);
        m_ProgressBar = (ProgressBar) m_Dialog.findViewById(R.id.progress_bar);
        TextView progressText = (TextView) m_Dialog.findViewById(R.id.progress_text);
        progressText.setText("" + message);
        progressText.setVisibility(View.VISIBLE);
        m_ProgressBar.setVisibility(View.VISIBLE);
        m_ProgressBar.setIndeterminate(true);
        m_Dialog.setCancelable(false);
        m_Dialog.setCanceledOnTouchOutside(false);
        m_Dialog.show();
    }
    use it like this in fragments
    
    CShowProgress progressbar = CShowProgress.getInstance();
    
    progressbar.showProgress(getActivity(),"Your message")
    

    【讨论】:

    • @Rohit Heera 我无法关闭进度条
    • 请创建另一个方法并在需要关闭时调用该方法。公共无效dismiss() { if (m_Dialog!= null && m_Dialog.isShowing()) { m_Dialog.dismiss(); } }
    • @RohitHeera 我尝试了相同但无法关闭应用程序变成崩溃说不启动对话
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 2017-09-09
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多