ProgressDialog เลิกใช้แล้วตัวเลือกอื่นที่จะใช้คืออะไร


215

ฉันเจอเพื่อดูว่าProgressDialogเลิกใช้แล้ว ProgressBarสิ่งที่จะเป็นหนึ่งในทางเลือกที่จะใช้ในสถานที่ที่แตกต่างจาก ฉันใช้ android studio เวอร์ชั่น 2.3.3

ProgressDialog progressDialog=new ProgressDialog(this);
progressDialog.show();

สำเนาที่เป็นไปได้ของProgressDialog เลิกใช้แล้ว
Lalit Jadav

คำตอบ:


196

ใช่API level 26มันเลิกใช้แล้ว progressBarแต่คุณสามารถใช้

ในการสร้างโดยทางโปรแกรม:

ก่อนอื่นรับการอ้างอิงถึงเค้าโครงของรูท

RelativeLayout layout = findViewById(R.id.display);  //specify here Root layout Id

หรือ

RelativeLayout layout = findViewById(this);

จากนั้นเพิ่มแถบความคืบหน้า

progressBar = new ProgressBar(youractivity.this, null, android.R.attr.progressBarStyleLarge);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100, 100);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
layout.addView(progressBar, params);

เพื่อแสดงแถบความคืบหน้า

progressBar.setVisibility(View.VISIBLE);

เพื่อซ่อนแถบความคืบหน้า

progressBar.setVisibility(View.GONE);

หากต้องการปิดใช้งานการโต้ตอบกับผู้ใช้คุณเพียงแค่เพิ่มรหัสต่อไปนี้

getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                           WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

ในการรับการโต้ตอบจากผู้ใช้คุณต้องเพิ่มรหัสต่อไปนี้

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

เพียงเพื่อใช้อ้างอิงในอนาคตเปลี่ยนไปandroid.R.attr.progressBarStyleSmallandroid.R.attr.progressBarStyleHorizontal

รหัสด้านล่างใช้งานได้เฉพาะด้านบน API level 21

progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));

วิธีสร้างผ่าน xml:

<ProgressBar
        android:id="@+id/progressbar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:indeterminate="true"
        android:max="100"
        android:backgroundTint="@color/white"
        android:layout_below="@+id/framelauout"
        android:indeterminateTint="#1a09d6"
        android:layout_marginTop="-7dp"/>

ในกิจกรรมของคุณ

progressBar = (ProgressBar) findViewById(R.id.progressbar);

การแสดง / ซ่อนแถบความคืบหน้าเหมือนกัน

 progressBar.setVisibility(View.VISIBLE); // To show the ProgressBar 
 progressBar.setVisibility(View.INVISIBLE); // To hide the ProgressBar

นี่คือภาพตัวอย่างของสิ่งที่ดูเหมือน:

สำหรับรายละเอียดเพิ่มเติม:
1. อ้างอิงหนึ่ง
2. อ้างอิงสอง


มันเหมือนกับว่าคุณกำลังใช้สิ่งนี้อยู่และคุณก็ทำเหมือนว่าใช่กล่องโต้ตอบความคืบหน้าในที่สุดเลิกใช้แล้วดังนั้นฉันจึงสามารถแสดงศักยภาพของฉันไปทั่วโลก: D ล้อเล่นขอบคุณมากสำหรับคำตอบโดยละเอียด
Mohamed Hajr

1
แต่วิธี setMessage () กับมัน
reverie_ss


โปรดอัปเดตรหัส xml เป็น "@android: color / white"
musterjunk

ในการรับแถบแนวนอนโปรดใช้: ProgressBar progressBar = new ProgressBar (youractivity.this, null, android.R.attr.progressBarStyleHorizontal); progressBar.setIndeterminate (จริง);
taranjeetsapra

44

คุณสามารถใช้AlertDialogเป็นดูด้านล่างรหัสสำหรับProgressDialog ProgressDialogฟังก์ชั่นนี้คุณต้องโทรหาเมื่อใดก็ตามที่คุณแสดงกล่องโต้ตอบความคืบหน้า

รหัส:

    public void setProgressDialog() {

    int llPadding = 30;
    LinearLayout ll = new LinearLayout(this);
    ll.setOrientation(LinearLayout.HORIZONTAL);
    ll.setPadding(llPadding, llPadding, llPadding, llPadding);
    ll.setGravity(Gravity.CENTER);
    LinearLayout.LayoutParams llParam = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    llParam.gravity = Gravity.CENTER;
    ll.setLayoutParams(llParam);

    ProgressBar progressBar = new ProgressBar(this);
    progressBar.setIndeterminate(true);
    progressBar.setPadding(0, 0, llPadding, 0);
    progressBar.setLayoutParams(llParam);

    llParam = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT);
    llParam.gravity = Gravity.CENTER;
    TextView tvText = new TextView(this);
    tvText.setText("Loading ...");
    tvText.setTextColor(Color.parseColor("#000000"));
    tvText.setTextSize(20);
    tvText.setLayoutParams(llParam);

    ll.addView(progressBar);
    ll.addView(tvText);

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setCancelable(true);
    builder.setView(ll);

    AlertDialog dialog = builder.create();
    dialog.show();
    Window window = dialog.getWindow();
    if (window != null) {
        WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
        layoutParams.copyFrom(dialog.getWindow().getAttributes());
        layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT;
        layoutParams.height = LinearLayout.LayoutParams.WRAP_CONTENT;
        dialog.getWindow().setAttributes(layoutParams);
    }
}

เอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่


จะยกเลิกได้อย่างไร?
Jay Dangar

1
ทำให้ฐานชั้นหนึ่งเช่น BaseActivity แล้วหลังจากที่เพิ่มชิ้นส่วนของรหัสนี้ยังเพิ่มวิธีการหนึ่งยกเลิกการโต้ตอบ แต่การที่คุณจะต้องกำหนด 'AlertDialog โต้ตอบ' วัตถุทั่วโลก
Kishan Donga

จากนั้นเรียกใช้เมธอด dialog.dismiss () ภายในวิธีซ่อนไดอะล็อกของคุณ
Kishan Donga

1
ทุกอย่างเรียบร้อยดี แต่การแตะที่ใดก็ได้บนกล่องโต้ตอบหน้าจอจะถูกยกเลิกการเรียกใช้บริการกำลังดำเนินอยู่และสามารถยกเลิกได้และเล่นกับ UI ที่ไม่ถูกต้องโซลูชันใด ๆ
Vivek Kumar

คุณสามารถตั้งค่าไม่สามารถยกเลิกได้ แต่หมุนอุปกรณ์หรือใช้หน้าจอแยกมันจะถูกยกเลิกอยู่แล้วและผู้ใช้สามารถโต้ตอบกับ UI ที่ยังไม่พร้อม อาจAlertDialogไม่ควรใช้ที่นี่
Meow Cat 2012

30

คลาสนี้เลิกใช้แล้วในระดับ API 26 ProgressDialog เป็นกล่องโต้ตอบโมดัลซึ่งป้องกันไม่ให้ผู้ใช้โต้ตอบกับแอพ แทนที่จะใช้คลาสนี้คุณควรใช้ตัวบ่งชี้ความคืบหน้าเช่น ProgressBar ซึ่งสามารถฝังอยู่ใน UI ของแอปของคุณ หรือคุณสามารถใช้การแจ้งเตือนเพื่อแจ้งให้ผู้ใช้ทราบถึงความคืบหน้าของงาน ลิงค์

เลิกใช้แล้วAndroid Oเนื่องจากGoogleมาตรฐาน UI ใหม่


1
"คลาสนี้เลิกใช้แล้วใน API ระดับ 26" ใช้แทนวันที่ พวกเขาไม่ต้องการให้คุณใช้อีกต่อไป ใช่มันเป็นเพราะมาตรฐาน UI ใหม่ แต่ใช้กับทุกระดับ API ...
creativecreatorormaybenot

28
"เลิกใช้แล้วที่ Android O เนื่องจากมาตรฐาน UI ใหม่ของ Google" - โปรดเชื่อมโยงมาตรฐาน UI ใหม่
Ajay S

22
และสาเหตุที่ทำให้ค่าเสื่อมราคาเป็นเพราะบล็อกการป้อนข้อมูลของผู้ใช้ บางครั้งฉันก็สงสัยว่าวิศวกร Google ผงชนิดใดกำลังพูดจาปุบ การใช้กล่องโต้ตอบการบล็อกง่ายกว่าการซ่อน / ปิดใช้งานการควบคุมอินพุตจากนั้นเปิดใช้งานแถบความคืบหน้า คิดโง่ ๆ ในส่วนของ Google
TheRealChx101

@ TheRealChx101 Android UI ได้รับการออกแบบมาเพื่อให้ผู้ใช้รู้สึกถึงความรู้สึกผิด ๆ ที่เกิดขึ้นจากต้นทุนการแก้ปัญหาราคาแพงเพื่อป้องกันข้อผิดพลาดร้ายแรงที่เกิดขึ้น รอจนกว่าคุณจะได้รับอนุญาตและสิ่งที่ผู้ให้บริการจ่ายให้ Google เพื่อบอกว่าคุณทำได้และไม่สามารถเข้าถึงได้
รถเข็นที่ถูกทิ้งร้าง

3
ฉันคิดว่าพวกเขามีความสนใจในการป้องกันการใช้กล่องโต้ตอบโมดอลมากขึ้น: บางครั้งพวกเขาจะแสดงให้ผู้ใช้รอการสิ้นสุดของการดำเนินการในสถานการณ์ที่ผู้ใช้ไม่ควรต้องรอเลย แต่สามารถทำสิ่งอื่น ๆ ต่อไป ดังนั้นการทำให้พวกเขารอทำให้ประสบการณ์การใช้งานของผู้ใช้ลดลงโดยไม่จำเป็น อย่างไรก็ตามมีหลายสถานการณ์ที่ไม่มีทางเลือกสำหรับผู้ใช้ แต่รอการดำเนินการให้เสร็จสิ้นดังนั้นฉันยอมรับว่าควรมีวิธีมาตรฐานที่ไม่คัดค้านสำหรับกรณีเหล่านี้แทนที่จะบังคับให้นักพัฒนาแต่ละรายใช้งานของตนเอง
Fran Marzoa

26

คุณสามารถออกแบบอินเทอร์เฟซ xml สำหรับแถบความคืบหน้าของคุณและส่งเป็นมุมมองไปยัง AlertDialog จากนั้นแสดงหรือปิดกล่องโต้ตอบเมื่อใดก็ตามที่คุณต้องการ

progress.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:padding="13dp"
    android:layout_centerHorizontal="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ProgressBar
        android:id="@+id/loader"
        android:layout_marginEnd="5dp"
        android:layout_width="45dp"
        android:layout_height="45dp" />
    <TextView
        android:layout_width="wrap_content"
        android:text="Loading..."
        android:textAppearance="?android:textAppearanceSmall"
        android:layout_gravity="center_vertical"
        android:id="@+id/loading_msg"
        android:layout_toEndOf="@+id/loader"
        android:layout_height="wrap_content" />

</LinearLayout>

รหัสรหัสที่แสดงกล่องโต้ตอบความคืบหน้า เพียงคัดลอกรหัสนี้และวางส่วนของคุณ

  AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
       private void setDialog(boolean show){
            builder.setView(R.layout.progress);
            Dialog dialog = builder.create();
            if (show)dialog.show();
            else dialog.dismiss();
        }

จากนั้นให้เรียกเมธอดเมื่อใดก็ตามที่คุณต้องการแสดงความคืบหน้าและส่งผ่านค่าเป็นอาร์กิวเมนต์เพื่อแสดงหรือเท็จเพื่อยกเลิกการโต้ตอบ


2
@Alok Rajasukumaran ดูเหมือนว่าคุณกำลังใช้กิจกรรมเพียงแค่แทนที่ด้วยthisเพื่อให้มีลักษณะเช่นนี้AlertDialog.Builder builder = new AlertDialog.Builder(this);โปรดตรวจสอบว่าคุณกำลังคัดลอกรหัสที่ถูกต้อง
DevMike01

1
layout_toEndOfสามารถลบได้ตั้งแต่ไม่ใช่เพื่อLinearLayout
Mark

21

ProgressBar นั้นง่ายมากและใช้งานง่ายฉันตั้งใจจะทำเช่นนี้เหมือนกับกล่องโต้ตอบความคืบหน้าอย่างง่าย ขั้นตอนแรกคือคุณสามารถสร้างเค้าโครง xml ของกล่องโต้ตอบที่คุณต้องการแสดงสมมติว่าเราตั้งชื่อเค้าโครงนี้

layout_loading_dialog.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="20dp">
    <ProgressBar
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="4"
        android:gravity="center"
        android:text="Please wait! This may take a moment." />
</LinearLayout>

ขั้นตอนต่อไปคือสร้าง AlertDialog ซึ่งจะแสดงเลย์เอาต์นี้ด้วย ProgressBar

AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setCancelable(false); // if you want user to wait for some process to finish,
builder.setView(R.layout.layout_loading_dialog);
AlertDialog dialog = builder.create();

ตอนนี้สิ่งที่เหลือคือการแสดงและซ่อนกล่องโต้ตอบนี้ในกิจกรรมคลิกของเราเช่นนี้

dialog.show(); // to show this dialog
dialog.dismiss(); // to hide this dialog

และนั่นคือมันควรจะทำงานอย่างที่คุณเห็นว่ามันง่ายมากที่จะใช้ ProgressBar แทน ProgressDialog ตอนนี้คุณสามารถแสดง / ยกเลิกกล่องโต้ตอบนี้ใน Handler หรือ ASyncTask ขึ้นอยู่กับความต้องการของคุณ


โปรดเปลี่ยนไปprogress_dialog.show(); builder.show();ขอบคุณ.
Matheus Miranda

2
ฉันได้เปลี่ยนชื่อเป็นวัตถุ AlertDialog ที่ถูกต้องในshow()/ dismiss()แต่ฉันไม่ได้ใส่builder.show()เพราะเมื่อนั้นให้ยกเลิกเราจะต้องทำสิ่งdialog.dismiss()ที่สร้างความสับสนให้กับคนที่ชอบให้รหัสของพวกเขาง่ายและเข้าใจง่ายและยัง เนื่องจากbuilder.show()คืนค่า AlertDialogวัตถุและเราจะต้องบันทึกการอ้างอิงเช่นAlertDialog dialog = builder.show();นั้นทำdialog.dismiss()มันง่ายกว่าที่จะได้builder.create()คืนค่าในAlertDialogวัตถุบางอย่างแล้วใช้วัตถุนั้นเพื่อแสดงและซ่อนกล่องโต้ตอบ
Syed Naeem

เราอาจใช้ "runOnUiThread (ใหม่ Runnable () {@Override โมฆะสาธารณะวิ่ง () {dialog.show/dismiss ();}});" หากเธรดการโทรไม่ใช่เธรด UI หลัก (มีประโยชน์เมื่อเราใช้โทรจาก WebView - shouldoverride method)
SHS

15

ใช่ ProgressDialog เลิกใช้แล้ว แต่กล่องโต้ตอบไม่

คุณสามารถขยายไฟล์ XML ของคุณเอง (ที่มีแถบความคืบหน้าและข้อความโหลด) ลงในวัตถุโต้ตอบของคุณแล้วแสดงหรือซ่อนโดยใช้ฟังก์ชั่นshow()และ dismiss()นี่คือตัวอย่าง (Kotlin):

คลาส ProgressDialog :

class ProgressDialog {
companion object {
    fun progressDialog(context: Context): Dialog{
        val dialog = Dialog(context)
        val inflate = LayoutInflater.from(context).inflate(R.layout.progress_dialog, null)
        dialog.setContentView(inflate)
        dialog.setCancelable(false)
        dialog.window!!.setBackgroundDrawable(
                ColorDrawable(Color.TRANSPARENT))
        return dialog
    }
  }
}

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:background="#fff"
android:padding="13dp"
android:layout_height="wrap_content">
<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyle"
    android:layout_width="100dp"
    android:layout_margin="7dp"
    android:layout_height="100dp"
    android:layout_above="@+id/no_jobs_pickups"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_margin="7dp"
    android:layout_toEndOf="@+id/progressBar"
    android:text="Loading..." />
</RelativeLayout>

ในรหัสของคุณ : ทำvar dialog = ProgressDialog.progressDialog(context)

เพื่อที่จะแสดง: dialog.show()

เพื่อซ่อน: dialog.dismiss()


11

ถ้าคุณต้องการขัดต่อความต้องการของพวกเขาจริงๆคุณยังสามารถใช้Sweet Alert Dialogหรือสร้างด้วยตัวเอง

progress_dialog_layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TableRow
        android:layout_centerInParent="true"
        android:layout_width="match_parent"
        android:layout_height="64dp" >

        <ProgressBar
            android:id="@+id/progressBar2"
            style="?android:attr/progressBarStyle"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />

        <TextView
            android:gravity="center|left"
            android:id="@+id/textView9"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textColor="@color/black"
            android:textSize="18sp"
            android:text="Downloading data. Please wait.." />
    </TableRow>
</RelativeLayout>

รหัส Java:

AlertDialog b;
AlertDialog.Builder dialogBuilder;

public void ShowProgressDialog() {
dialogBuilder = new AlertDialog.Builder(DataDownloadActivity.this);
LayoutInflater inflater = (LayoutInflater) getSystemService( Context.LAYOUT_INFLATER_SERVICE );
            View dialogView = inflater.inflate(R.layout.progress_dialog_layout, null);
            dialogBuilder.setView(dialogView);
            dialogBuilder.setCancelable(false);
            b = dialogBuilder.create();
            b.show();
        }

        public void HideProgressDialog(){

            b.dismiss();
        }

2
ฉันมีประสบการณ์ที่แย่มากกับ SweetAlertDialog ในสถานที่ผลิตต้องระวังให้มากเพราะมันรั่วจากหน้าต่างหนึ่งไปยังอีกหน้าต่างหนึ่ง
Jeremy

สำหรับฉันHideProgressไม่ทำอะไรเลย
Saeed Neamati

1
เหตุใดจึงต้องใช้ไลบรารีเพื่อแสดงกล่องโต้ตอบความคืบหน้า
Khemraj

6

ProgressBar เป็นทางเลือกที่ดีที่สุดสำหรับ ProgressDialog องค์ประกอบส่วนต่อประสานผู้ใช้ที่ระบุความคืบหน้าของการดำเนินการ

สำหรับข้อมูลเพิ่มเติมดูGoogle เอกสาร นี้: https://developer.android.com/reference/android/widget/ProgressBar.html


16
เขาพูดว่า "นอกเหนือจาก ProgressBar"
creativecreatorormaybenot

6

คุณไม่จำเป็นต้องนำเข้าห้องสมุดที่กำหนดเองใด ๆ

ฉันชอบที่จะใช้ความทันสมัยAlertDialogดังนั้นนี่เป็นเวอร์ชั่นKotlinสำหรับคำตอบที่ดีที่โพสต์โดยKishan Dongaในหน้านี้

รหัส Kotlin:

fun setProgressDialog(context:Context, message:String):AlertDialog {
    val llPadding = 30
    val ll = LinearLayout(context)
    ll.orientation = LinearLayout.HORIZONTAL
    ll.setPadding(llPadding, llPadding, llPadding, llPadding)
    ll.gravity = Gravity.CENTER
    var llParam = LinearLayout.LayoutParams(
                  LinearLayout.LayoutParams.WRAP_CONTENT,
                  LinearLayout.LayoutParams.WRAP_CONTENT)
    llParam.gravity = Gravity.CENTER
    ll.layoutParams = llParam

    val progressBar = ProgressBar(context)
    progressBar.isIndeterminate = true
    progressBar.setPadding(0, 0, llPadding, 0)
    progressBar.layoutParams = llParam

    llParam = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT)
    llParam.gravity = Gravity.CENTER
    val tvText = TextView(context)
    tvText.text = message
    tvText.setTextColor(Color.parseColor("#000000"))
    tvText.textSize = 20.toFloat()
    tvText.layoutParams = llParam

    ll.addView(progressBar)
    ll.addView(tvText)

    val builder = AlertDialog.Builder(context)
    builder.setCancelable(true)
    builder.setView(ll)

    val dialog = builder.create()
    val window = dialog.window
    if (window != null) {
        val layoutParams = WindowManager.LayoutParams()
        layoutParams.copyFrom(dialog.window?.attributes)
        layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT
        layoutParams.height = LinearLayout.LayoutParams.WRAP_CONTENT
                dialog.window?.attributes = layoutParams
    }
    return dialog
}

การใช้งาน:

val dialog = setProgressDialog(this, "Loading..")
dialog.show()

เอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่


วิธีการใช้งานในส่วน? บริบทคือส่วนใด
roghayeh hosseini

โดยปกติในส่วนของคุณคุณสามารถรับมุมมองปัจจุบันของคุณดังนั้นบริบทควร:view!!.context
Alessandro Ornano

4

ตามที่ระบุไว้ในหน้าเอกสารของทางเลือกคือ ดู 's สามารถทำซ้ำโดยการวางเป็นProgressBarProgressDialogProgressBarAlertDialog

คุณยังสามารถใช้งานได้ แต่ Android ไม่ต้องการให้คุณใช้นั่นคือเหตุผลที่เลิกใช้แล้ว ดังนั้นคุณควรพิจารณาการแก้ปัญหาของคุณในทางอื่นเช่นการฝังเข้าไปในของคุณProgressBarLayout


@ PeterHaddad มันทำงานได้ตามปกติใน api 28 ในโครงการของฉันและเหมือนกับ apis ที่ต่ำกว่า ตามที่แสดงความไม่เห็นด้วยจะไม่สนับสนุนอีกต่อไปและอาจไม่สามารถใช้งานได้ในอนาคต
DMonkey

3

ProgressDialog ถูกเลิกใช้ใน API ระดับ 26

"Deprecated" หมายถึงฟังก์ชั่นหรือองค์ประกอบที่อยู่ในกระบวนการของการถูกแทนที่ด้วยใหม่กว่า

ProgressDialog เป็นกล่องโต้ตอบโมดัลซึ่งป้องกันไม่ให้ผู้ใช้โต้ตอบกับแอพ แทนที่จะใช้คลาสนี้คุณควรใช้ตัวบ่งชี้ความคืบหน้าเช่นProgressBarซึ่งสามารถฝังใน UI ของแอปของคุณ

ความได้เปรียบ

โดยส่วนตัวแล้วฉันจะบอกว่าProgressBarมีขอบเหนือทั้งสอง ProgressBarเป็นองค์ประกอบส่วนต่อประสานผู้ใช้ที่ระบุถึงความคืบหน้าของการดำเนินการ แสดงแถบความคืบหน้าให้กับผู้ใช้ในที่ไม่ใช่ interruptiveวิธี แสดงแถบความคืบหน้าในส่วนต่อประสานผู้ใช้แอปของคุณ


2

ฉันใช้ DelayedProgressDialog จากhttps://github.com/Q115/DelayedProgressDialogมันทำเช่นเดียวกับ ProgressDialog พร้อมกับสิทธิประโยชน์เพิ่มเติมของความล่าช้าหากจำเป็น

ใช้มันคล้ายกับ ProgressDialog ก่อนที่ Android O:

DelayedProgressDialog progressDialog = new DelayedProgressDialog();
progressDialog.show(getSupportFragmentManager(), "tag");

2

คุณสามารถใช้คลาสนี้ที่ฉันเขียน มันมีฟังก์ชั่นพื้นฐานเท่านั้น ถ้าคุณต้องการ ProgressDialog ทำงานอย่างเต็มที่แล้วใช้น้ำหนักเบานี้ห้องสมุด

การติดตั้ง Gradle

เพิ่มการพึ่งพาต่อไปนี้ไปยัง module / build.gradle:

compile 'com.lmntrx.android.library.livin.missme:missme:0.1.5'

วิธีใช้งาน

การใช้งานคล้ายกับ ProgressDialog ดั้งเดิม

ProgressDialog progressDialog = new 
progressDialog(YourActivity.this);
progressDialog.setMessage("Please wait");
progressDialog.setCancelable(false);
progressDialog.show();
progressDialog.dismiss();

หมายเหตุ : คุณต้องแทนที่กิจกรรมonBackPressed()

การใช้งาน Java8:

@Override
public void onBackPressed() {
    progressDialog.onBackPressed(
            () -> {
                super.onBackPressed();
                return null;
            }
    );
}

การดำเนิน Kotlin:

override fun onBackPressed() {
   progressDialog.onBackPressed { super.onBackPressed() }
}

1

บางทีคู่มือนี้อาจช่วยคุณได้

ฉันมักจะชอบ AlertDialogs ที่กำหนดเองพร้อมตัวชี้ มันแก้ปัญหาเช่นการปรับแต่งมุมมองแอพ


1

มันอาจช่วยคนอื่น

แอพยอดนิยมจำนวนมากมีวิธีการที่แตกต่างกันในการแสดงความคืบหน้าของสิ่งต่าง ๆ เช่นคำขอเครือข่ายการโหลดไฟล์ ฯลฯ การโหลดสปินเนอร์ไม่แสดงจำนวนเนื้อหาที่โหลดหรือโหลดที่เหลือ มีช่วงเวลาของความไม่แน่นอนซึ่งไม่ดีในมุมมองของ UI / UX แอพยอดนิยมมากมาย (Facebook, Linkedin และอื่น ๆ ) ได้แก้ไขปัญหานี้โดยการแสดง UI ของกระดูกเปลือยก่อน จากนั้นเนื้อหาที่โหลดจะถูกบรรจุลงบนหน้าจอค่อยๆ

ฉันใช้ชิมเมอร์ สำหรับแอปของฉันเพื่อแก้ไขปัญหานี้

มีบทความที่ดีเกี่ยวกับเรื่องนี้ซึ่งจะเป็นประโยชน์สำหรับคนอื่น ๆ


0

ในกล่องโต้ตอบความคืบหน้าผู้ใช้จะไม่สามารถทำงานใด ๆ ได้ กระบวนการพื้นหลังทั้งหมดจะหยุดในระหว่างการโต้ตอบความคืบหน้า ดังนั้นขอแนะนำให้ผู้ใช้แถบความคืบหน้าแทนการโต้ตอบความคืบหน้า


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.