[英]progress dialog is not showing the spinner in android version 8.0 but it still works
[英]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.