วิธีที่ดีที่สุดในการแสดงสปินเนอร์ขณะที่แอพกำลังรอการตอบกลับจากเซิร์ฟเวอร์คืออะไร
สามารถทำได้โดยการเขียนโปรแกรมหรือไม่ ดังนั้นฉันไม่ต้องเพิ่ม load spinner ในไฟล์ xml ใช่ไหม
วิธีที่ดีที่สุดในการแสดงสปินเนอร์ขณะที่แอพกำลังรอการตอบกลับจากเซิร์ฟเวอร์คืออะไร
สามารถทำได้โดยการเขียนโปรแกรมหรือไม่ ดังนั้นฉันไม่ต้องเพิ่ม load spinner ในไฟล์ xml ใช่ไหม
คำตอบ:
ProgressDialogถูกคัดค้านจาก Android Oreo ใช้ProgressBarแทน
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();
หรือ
ProgressDialog.show(this, "Loading", "Wait while loading...");
โดยวิธีการที่สปินเนอร์มีความหมายที่แตกต่างใน Android (มันก็เหมือนกับการเลือกแบบเลื่อนลงใน HTML)
progress.setCancelable(false);
ฉันคงนี้โดยการเพิ่มการเรียกไปยัง
ProgressDialog
ถูกเลิกใช้ใน Android O developer.android.com/reference/android/app/ProgressDialog.html
ProgressDialog เลิกใช้แล้วตั้งแต่ระดับ API 26 https://developer.android.com/reference/android/app/ProgressDialog.html
ฉันรวม ProgressBar ไว้ในเลย์เอาต์ของฉัน
<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" />
และเปลี่ยนการเปิดเผยเป็น. GONE | .VISIBLE ขึ้นอยู่กับกรณีการใช้งาน
progressBar_cyclic.visibility = View.VISIBLE
ใช้ ProgressDialog
ProgressDialog.show(Context context, CharSequence title, CharSequence message);
อย่างไรก็ตามนี่ถือเป็นรูปแบบการต่อต้านวันนี้ (2013): http://www.youtube.com/watch?v=pEGWcMTxs3I
ProgressDialog
ถูกเลิกใช้ใน Android O developer.android.com/reference/android/app/ProgressDialog.html
จริง ๆ แล้วถ้าคุณกำลังรอการตอบสนองจากเซิร์ฟเวอร์ก็ควรทำแบบเป็นโปรแกรม คุณสามารถสร้างกล่องโต้ตอบความคืบหน้าและยกเลิกได้ แต่จากนั้นอีกครั้งซึ่งไม่ใช่ "วิธี Android"
ปัจจุบันวิธีที่แนะนำคือการใช้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;
}
}
จากนั้นในกิจกรรมของคุณคุณตั้งผู้จัดการ Fragment และแสดงกล่องโต้ตอบเมื่อการรอเซิร์ฟเวอร์เริ่มต้น:
FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");
เมื่อเซิร์ฟเวอร์ของคุณตอบสนองแล้วคุณจะยกเลิก:
myInstance.dismiss()
โปรดจำไว้ว่า progressdialog เป็นสปินเนอร์หรือแถบความคืบหน้าขึ้นอยู่กับคุณสมบัติอ่านเพิ่มเติมในคู่มือ api
ProgressDialog
เลิกใช้แล้วใน Android O developer.android.com/reference/android/app/ProgressDialog.html
นี่คือวิธีที่ฉันทำสิ่งนี้เพื่อให้ไดอะล็อกความคืบหน้าเดียวสามารถเปิดได้ในแต่ละครั้ง จากคำตอบของ 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();
}
}
ฉันยังต้องใช้
protected void onResume() {
dismissLoadingDialog();
super.onResume();
}
ProgressDialog
ถูกเลิกใช้ใน Android O developer.android.com/reference/android/app/ProgressDialog.html