簡體   English   中英

Android進度對話框微調器未顯示

[英]Android Progress Dialog Spinner not showing

我為“進度對話框”創建了一個類,只是為了避免重寫幾行代碼。 請檢查下面的代碼。

public class AppProgressDialog {

/**
 * progress dialog object 
 */
private ProgressDialog progressDialog;

/**
 * stores is progress dialog is cancellable 
 */
private boolean isProgressDialogCancelable = false;

/**
 * style of progress dialog
 */
private int progressDialogStyle = ProgressDialog.STYLE_SPINNER;

/**
 * true if progress time not known
 */
private boolean isIndetermined = true;

/**
 * constructor to initialize this custom progress dialog class
 * @param activity activity to which this progress dialog will belong
 * @param message Message to be shown inside progress dialog
 */
public AppProgressDialog(Activity activity) {
    progressDialog = new ProgressDialog(activity);
    progressDialog.setCancelable(isProgressDialogCancelable);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.setIndeterminate(isIndetermined);
}

/**
 * function to set display message inside progress dialog
 * @param message string to be shown inside progress dialog 
 */
public void setProgressDialogMessage(String message)
{
    if (progressDialog!=null) {
        progressDialog.setMessage(message);
    }
}

/**
 * function to show progress dialog
 */
public void showProgressDialog()
{
    if (progressDialog!=null) {
        if(!progressDialog.isShowing())
            progressDialog.show();
    }
}

/**
 * function to hide progress dialog
 */
public void dismissProgressDialog()
{
    if (progressDialog!=null) {
        if(progressDialog.isShowing())
            progressDialog.hide();
    }
}

這就是我在片段中使用它的方式:

public class TestFragment extends Fragment {

private AppProgressDialog progressDialog;

public static TestFragment newInstance() {

    TestFragment fragment = new TestFragment();
    return fragment;

}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    progressDialog = new AppProgressDialog(getActivity());
}

@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_login, container, false);

    Button btnTest = rootView.findViewById(R.id.btnTest);
    btnTest.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            new TestAsyncTask().execute();

        }
    });
    return view;
}

@Override
public void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);
}

@Override
public void onResume() {
    super.onResume();
}

class TestAsyncTask extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        progressDialog.setProgressDialogMessage("Logging you to eventizon");
        progressDialog.showProgressDialog();
    }

    @Override
    protected String doInBackground(String... params) {
        //some code
    }

    @Override
    protected void onPostExecute(String result) {
        progressDialog.dismissProgressDialog();
    }

}

}

現在,問題是我看不到通常在“進度”對話框中看到的微調器。 我正在棒棒糖上對此進行測試。

您需要在UI線程中運行進度對話框,因此在您的AsyncTask preExecute方法中執行以下操作,

getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                    progressDialog = new AppProgressDialog(getActivity());
                    progressDialog.setProgressDialogMessage("Logging you to eventizon");
                    progressDialog.showProgressDialog();
                    }
                });

然后onPostExecute關閉對話框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM