Cách tốt nhất để hiển thị một spinner tải trong khi ứng dụng đang chờ phản hồi từ máy chủ là gì?
Điều này có thể được thực hiện theo chương trình? Vì vậy, tôi không phải thêm spinner tải trong tệp xml?
Cách tốt nhất để hiển thị một spinner tải trong khi ứng dụng đang chờ phản hồi từ máy chủ là gì?
Điều này có thể được thực hiện theo chương trình? Vì vậy, tôi không phải thêm spinner tải trong tệp xml?
Câu trả lời:
ProgressDialog không được dùng từ Android Oreo. Sử dụng ProgressBar thay thế
ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.setCancelable(false); // disable dismiss by tapping outside of the dialog
progress.show();
// To dismiss the dialog
progress.dismiss();
HOẶC LÀ
ProgressDialog.show(this, "Loading", "Wait while loading...");
Nhân tiện, Spinner có một ý nghĩa khác trong Android. (Giống như thả xuống chọn trong HTML)
progress.setCancelable(false);
.
ProgressDialog
đã bị phản đối trong nhà phát triển
ProgressDialog đã không còn được sử dụng kể từ API cấp 26 https://developer.android.com/reference/android/app/ProTHERDialog.html
Tôi bao gồm một ProgressBar trong bố cục của tôi
<ProgressBar
android:layout_weight="1"
android:id="@+id/progressBar_cyclic"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="40dp"
android:minWidth="40dp" />
và thay đổi khả năng hiển thị của nó thành .GONE | .VISIBLE tùy thuộc vào trường hợp sử dụng.
progressBar_cyclic.visibility = View.VISIBLE
Sử dụng ProgressDialog
ProgressDialog.show(Context context, CharSequence title, CharSequence message);
Tuy nhiên, đây được coi là một mẫu chống ngày hôm nay (2013): http://www.youtube.com/watch?v=pEGWcMTxs3I
ProgressDialog
đã bị phản đối trong nhà phát triển
Trên thực tế nếu bạn đang chờ phản hồi từ máy chủ thì nên thực hiện theo chương trình. Bạn có thể tạo một hộp thoại tiến trình và loại bỏ nó, nhưng một lần nữa, đó không phải là "cách android".
Hiện tại phương pháp được đề xuất là sử dụng DialogFragment :
public class MySpinnerDialog extends DialogFragment {
public MySpinnerDialog() {
// use empty constructors. If something is needed use onCreate's
}
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
_dialog = new ProgressDialog(getActivity());
this.setStyle(STYLE_NO_TITLE, getTheme()); // You can use styles or inflate a view
_dialog.setMessage("Spinning.."); // set your messages if not inflated from XML
_dialog.setCancelable(false);
return _dialog;
}
}
Sau đó, trong hoạt động của mình, bạn đặt trình quản lý Fragment và hiển thị hộp thoại sau khi chờ máy chủ bắt đầu:
FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");
Khi máy chủ của bạn đã phản hồi hoàn tất, bạn sẽ loại bỏ nó:
myInstance.dismiss()
Hãy nhớ rằng Progressdialog là một spinner hoặc thanh tiến trình tùy thuộc vào các thuộc tính, đọc thêm về hướng dẫn api
ProgressDialog
đã bị phản đối trong nhà phát triển
Đây là cách tôi đã làm điều này để mỗi lần chỉ có thể mở một hộp thoại tiến trình. Dựa trên câu trả lời từ Suraj Bajaj
private ProgressDialog progress;
public void showLoadingDialog() {
if (progress == null) {
progress = new ProgressDialog(this);
progress.setTitle(getString(R.string.loading_title));
progress.setMessage(getString(R.string.loading_message));
}
progress.show();
}
public void dismissLoadingDialog() {
if (progress != null && progress.isShowing()) {
progress.dismiss();
}
}
Tôi cũng đã phải sử dụng
protected void onResume() {
dismissLoadingDialog();
super.onResume();
}
ProgressDialog
đã bị phản đối trong nhà phát triển