ฉันจะแสดงมุมมองรายการในกล่องโต้ตอบการเตือนของ Android ได้อย่างไร


291

ในแอปพลิเคชัน Android ฉันต้องการแสดงมุมมองรายการแบบกำหนดเองใน AlertDialog

ฉันจะทำสิ่งนี้ได้อย่างไร


เพียงใช้รายการของสตริงจากนั้นสร้างลำดับของ CharSequence [] จากนั้นใช้ AlertDialog.Builder เพื่อแสดงรายการ นี่คือตัวอย่างที่ง่ายที่สุดกับ snapshot feelzdroid.com/2014/12/…
Naruto

คำตอบ:


498

ใช้โค้ดด้านล่างเพื่อแสดงรายการที่กำหนดเองใน AlertDialog

AlertDialog.Builder builderSingle = new AlertDialog.Builder(DialogActivity.this);
builderSingle.setIcon(R.drawable.ic_launcher);
builderSingle.setTitle("Select One Name:-");

final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(DialogActivity.this, android.R.layout.select_dialog_singlechoice);
arrayAdapter.add("Hardik");
arrayAdapter.add("Archit");
arrayAdapter.add("Jignesh");
arrayAdapter.add("Umang");
arrayAdapter.add("Gatti");

builderSingle.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });

builderSingle.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String strName = arrayAdapter.getItem(which);
                AlertDialog.Builder builderInner = new AlertDialog.Builder(DialogActivity.this);
                builderInner.setMessage(strName);
                builderInner.setTitle("Your Selected Item is");
                builderInner.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,int which) {
                                dialog.dismiss();
                            }
                        });
                builderInner.show();
            }
        });
builderSingle.show();

มีความเป็นไปได้หรือไม่ที่จะตรวจพบการคลิกที่ยาวในรายการนี้ ฉันกำลังมองหาชั่วโมงสำหรับการแก้ปัญหาเมนูป๊อปอัพที่ทำงานในทุกระดับ API
wutzebaer

7
@Shvet ที่คาดคะเนshow ()จะสร้างและแสดงไดอะล็อกในขณะที่create ()จะสร้างขึ้นมาเท่านั้น
htafoya

ฉันจะใช้การตั้งค่านี้ได้อย่างไร แต่แทนที่จะเข้ารหัสรายการของฉันฉันต้องได้รับข้อมูลบางส่วนจากการแยกวิเคราะห์ที่ผู้ใช้มีอยู่แล้ว?
stanley santoso

@stanleysantoso สร้างอะแดปเตอร์ของคุณเองกรอกข้อมูลแล้วตั้งเป็นอะแดปเตอร์สำหรับ Alertsdialog: dialogBuilder.setAdapter (MyCustomAdapter); สิ่งนี้น่าจะใช้ได้
CantThinkOfAny ทุกอย่าง

1
เค้าโครง select_dialog_single_choice คืออะไร
ForceFieldsForDoors

254

ตามเอกสารมีสามประเภทรายการที่สามารถใช้กับAlertDialog:

  1. รายการตัวเลือกเดียวแบบดั้งเดิม
  2. รายการตัวเลือกเดียวแบบต่อเนื่อง (ปุ่มตัวเลือก)
  3. รายการที่มีหลายตัวเลือกแบบต่อเนื่อง (ช่องทำเครื่องหมาย)

ฉันจะยกตัวอย่างด้านล่าง

รายการตัวเลือกเดียวแบบดั้งเดิม

setItemsวิธีที่จะทำให้รายการเดียวทางเลือกแบบดั้งเดิมคือการใช้

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

รุ่น Java

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose an animal");

// add a list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
builder.setItems(animals, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which) {
            case 0: // horse
            case 1: // cow
            case 2: // camel
            case 3: // sheep
            case 4: // goat
        }
    }
});

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

OnClickListenerไม่จำเป็นต้องมีปุ่มตกลงไม่เป็นเพราะทันทีที่ผู้ใช้คลิกที่ควบคุมรายการจะถูกส่งกลับไปยัง

รุ่น Kotlin

// setup the alert builder
val builder = AlertDialog.Builder(context)
builder.setTitle("Choose an animal")

// add a list
val animals = arrayOf("horse", "cow", "camel", "sheep", "goat")
builder.setItems(animals) { dialog, which ->
    when (which) {
        0 -> { /* horse */ }
        1 -> { /* cow   */ }
        2 -> { /* camel */ }
        3 -> { /* sheep */ }
        4 -> { /* goat  */ }
    }
}

// create and show the alert dialog
val dialog = builder.create()
dialog.show()

รายการปุ่มตัวเลือก

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

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

รุ่น Java

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose an animal");

// add a radio button list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
int checkedItem = 1; // cow
builder.setSingleChoiceItems(animals, checkedItem, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // user checked an item
    }
});

// add OK and Cancel buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // user clicked OK
    }
});
builder.setNegativeButton("Cancel", null);

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

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

รุ่น Kotlin

// setup the alert builder
val builder = AlertDialog.Builder(context)
builder.setTitle("Choose an animal")

// add a radio button list
val animals = arrayOf("horse", "cow", "camel", "sheep", "goat")
val checkedItem = 1 // cow
builder.setSingleChoiceItems(animals, checkedItem) { dialog, which ->
    // user checked an item
}


// add OK and Cancel buttons
builder.setPositiveButton("OK") { dialog, which ->
    // user clicked OK
}
builder.setNegativeButton("Cancel", null)

// create and show the alert dialog
val dialog = builder.create()
dialog.show()

รายการช่องทำเครื่องหมาย

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

setMultiChoiceItemsวิธีที่จะทำให้รายการช่องทำคือการใช้งาน

รุ่น Java

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose some animals");

// add a checkbox list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
boolean[] checkedItems = {true, false, false, true, false};
builder.setMultiChoiceItems(animals, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
        // user checked or unchecked a box
    }
});

// add OK and Cancel buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // user clicked OK
    }
});
builder.setNegativeButton("Cancel", null);

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

ที่นี่ฉันเขียนรหัสอย่างเข้มงวดว่ามีรายการใดบ้างในรายการที่ได้รับการตรวจสอบแล้ว ArrayList<Integer>มันมีโอกาสมากขึ้นที่คุณต้องการในการติดตามของพวกเขาใน ดูตัวอย่างเอกสารสำหรับรายละเอียดเพิ่มเติม คุณยังสามารถตั้งค่ารายการที่ตรวจสอบเป็นnullทำเครื่องหมายเป็นหากคุณต้องการให้ทุกอย่างเริ่มต้นโดยไม่เลือก

รุ่น Kotlin

// setup the alert builder
val builder = AlertDialog.Builder(context)
builder.setTitle("Choose some animals")

// add a checkbox list
val animals = arrayOf("horse", "cow", "camel", "sheep", "goat")
val checkedItems = booleanArrayOf(true, false, false, true, false)
builder.setMultiChoiceItems(animals, checkedItems) { dialog, which, isChecked ->
    // user checked or unchecked a box
}

// add OK and Cancel buttons
builder.setPositiveButton("OK") { dialog, which ->
    // user clicked OK
}
builder.setNegativeButton("Cancel", null)

// create and show the alert dialog
val dialog = builder.create()
dialog.show()

หมายเหตุ

  • สำหรับcontextในรหัสข้างต้นอย่าใช้getApplicationContext()หรือคุณจะได้รับIllegalStateException(ดูที่นี่เพื่อดูสาเหตุ) thisแต่ได้รับการอ้างอิงกับบริบทกิจกรรมเช่นกับ
  • นอกจากนี้คุณยังสามารถเติมรายการจากฐานข้อมูลหรือแหล่งอื่นใช้setAdapterหรือsetCursorหรือผ่านในCursorหรือListAdapterเข้ามาในหรือsetSingleChoiceItemssetMultiChoiceItems
  • หากรายการยาวกว่าพอดีกับหน้าจอกล่องโต้ตอบจะเลื่อนโดยอัตโนมัติ ถ้าคุณมีรายการที่ยาวมากฉันเดาว่าคุณน่าจะสร้างกล่องโต้ตอบแบบกำหนดเองด้วยRecyclerView RecyclerView
  • ในการทดสอบตัวอย่างทั้งหมดข้างต้นฉันเพิ่งมีโปรเจ็กต์ง่าย ๆ เพียงปุ่มเดียวกว่าจะแสดงกล่องโต้ตอบเมื่อคลิก:

    import android.support.v7.app.AppCompatActivity;
    
    public class MainActivity extends AppCompatActivity {
    
        Context context;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            context = this;
        }
    
        public void showAlertDialogButtonClicked(View view) {
    
            // example code to create alert dialog lists goes here
        }
    }

ที่เกี่ยวข้อง


2
นี่มันยอดเยี่ยมตอนนี้เพิ่มไอคอน;)
AaA

1
@AaA ฉันคิดว่าคุณจะต้องสร้างกล่องโต้ตอบแจ้งเตือนรูปแบบที่กำหนดเองที่ใช้RecyclerViewในรูปแบบนั้น
Suragch

'ซึ่ง' ในวิธีการโต้ตอบ onclick หมายความว่าอะไร?
แล้ว

@gonephishing ตามเอกสารเป็น "ปุ่มที่ถูกคลิก (เช่นBUTTON_POSITIVE) หรือตำแหน่งของรายการที่คลิก"
Suragch

1
หากคุณต้องการใช้ลิสต์แบบง่าย (1) กับอะแดปเตอร์ที่กำหนดเองให้ใช้Builder.setAdapter(ListAdapter, DialogInterface.OnClickListener): whichในลิสเทนเนอร์onClickจะเท่ากับตำแหน่งไอเท็มที่ถูกคลิก Builder.setOnItemSelectedListenerจะไม่มีผลใด ๆ
Miha_x64

122

คุณสามารถใช้กล่องโต้ตอบแบบกำหนดเอง

รูปแบบการโต้ตอบที่กำหนดเอง list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ListView
        android:id="@+id/lv"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"/>
</LinearLayout>

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

Dialog dialog = new Dialog(Activity.this);
       dialog.setContentView(R.layout.list)

ListView lv = (ListView ) dialog.findViewById(R.id.lv);
dialog.setCancelable(true);
dialog.setTitle("ListView");
dialog.show();

แก้ไข:

ใช้ alertdialog

String names[] ={"A","B","C","D"};
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
LayoutInflater inflater = getLayoutInflater();
View convertView = (View) inflater.inflate(R.layout.custom, null);
alertDialog.setView(convertView);
alertDialog.setTitle("List");
ListView lv = (ListView) convertView.findViewById(R.id.lv);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names);
lv.setAdapter(adapter);
alertDialog.show();

custom.xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</ListView>

ตะครุบ

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


1
@Juan - devtopia.co คุณแก้ไขโพสต์ของฉันหลังจาก upvoting เพียงเพื่อ downvote คุณสามารถแสดงความคิดเห็นสิ่งที่ผิด
Raghunandan

ไม่มีอะไรในเวอร์ชั่นปัจจุบันเวอร์ชั่นก่อนหน้านี้ไม่มีข้อมูลอะแดปเตอร์ทั้งหมดและเมื่อนั้นจึงแสดงรายการ ListView ที่ว่างเปล่าฉันดีใจที่ลบคะแนนลบของฉันทันที ฉันโหวตให้กับคำตอบที่ไม่สมบูรณ์ไม่ใช่ในการแก้ไขนี้จาก 3 ชั่วโมงที่ผ่านมา
Juan Cortés

@ Raghunandan ฉันใช้รหัสของคุณ แต่ฉันได้รับข้อยกเว้นใน lv.setAdapter (อะแดปเตอร์); เส้นคุณช่วยฉันได้ไหม
Ahmad Vatani

@Ahmad การสกัดคืออะไร?
Raghunandan

1
@NeilGaliaskarov ใช่มันสามารถเลื่อนได้ Listview จะเลื่อน
Raghunandan

44
final CharSequence[] items = {"A", "B", "C"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Make your selection");
builder.setItems(items, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
        // Do something with the selection
        mDoneButton.setText(items[item]);
    }
});
AlertDialog alert = builder.create();
alert.show();

1
m.DoneButton คืออะไร
ForceFieldsForDoors

2
@ArhatBaid แต่ setItems ไม่ทำงานเมื่อฉันใส่ข้อความใน setMessage ฉันค้นหาใน google แต่คำตอบที่ฉันพบคือตั้งข้อความใน setTitle แต่ปัญหาคือ setTitle อนุญาตให้มีจำนวนอักขระไม่กี่ตัวเท่านั้น มีวิธีใช้ setMessage และ setItems ในกล่องโต้ตอบการแจ้งเตือนหรือไม่
David

@David คุณต้องไปที่กล่องโต้ตอบที่กำหนดเอง
Arhat Baid

1
วิธีแก้ปัญหานี้ดีมากเพราะคุณสามารถไปด้วยListAdapterด้วยsetSingleChoiceItems(คล้ายกับการโทรด้านบน)
snotyak

สมบูรณ์แบบอย่างที่คาดไว้ ... จัดการรายการนับร้อยด้วยรหัสขั้นต่ำ :)
jeet.chanchawat

10

ใช้import android.app.AlertDialog;การนำเข้า "" จากนั้นคุณเขียน

    String[] items = {"...","...."};             
    AlertDialog.Builder build = new AlertDialog.Builder(context);
    build.setItems(items, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //do stuff....
        }
    }).create().show();

คุณต้องการ bc ด้วยการสร้างคุณสร้าง AlertDialog ที่คุณแสดงสิ่งนี้แล้ว ไม่ใช่ผู้สร้าง (c) Facebamm
Facebamm

@Facebamm ไม่เป็นความจริง show()ทำทั้งสองอย่าง Calling this method is functionally identical to: AlertDialog dialog = builder.create(); dialog.show();ที่เป็นโดยตรงจากshow()เอกสารของวิธีการ
ᴛʜᴇᴘᴀᴛᴇʟ

ถูกต้อง แต่บางครั้งฉันพบข้อผิดพลาดส่วนติดต่อผู้ใช้ (c) Facebamm
Facebamm

ไม่นั่นไม่จริง show () เหมือนกันกับ create (). show (); / ** * สร้าง {@link AlertDialog} พร้อมอาร์กิวเมนต์ที่ให้กับตัวสร้าง * นี้และแสดงข้อความโต้ตอบแบบทันที * <p> * การเรียกใช้วิธีนี้เหมือนกับหน้าที่: * <pre> * กล่องโต้ตอบ AlertDialog = builder.create (); * dialog.show (); * </pre> * / สาธารณะ AlertDialog แสดง () {กล่องโต้ตอบ AlertDialog สุดท้าย = สร้าง (); dialog.show (); โต้ตอบกลับ }
Emanuel S

ตกลงฉันได้ทดสอบในขณะที่และฉันบอกว่า sry จริงว่า (c) Facebamm
Facebamm

4

มันง่ายเกินไป

final CharSequence[] items = {"Take Photo", "Choose from Library", "Cancel"};

AlertDialog.Builder builder = new AlertDialog.Builder(MyProfile.this);

builder.setTitle("Add Photo!");
builder.setItems(items, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int item) {
        if (items[item].equals("Take Photo")) {
            getCapturesProfilePicFromCamera();
        } else if (items[item].equals("Choose from Library")) {
            getProfilePicFromGallery();
        } else if (items[item].equals("Cancel")) {
            dialog.dismiss();
        }
    }
});
builder.show();

3

ในฐานะผู้เริ่มต้นฉันขอแนะนำให้คุณดำเนินการผ่านhttp://www.mkyong.com/android/android-custom-dialog-example/

ฉันจะสรุปสิ่งที่มันทำ

  1. สร้างไฟล์ XML สำหรับกล่องโต้ตอบและกิจกรรมหลัก
  2. ในกิจกรรมหลักในสถานที่ที่ต้องการสร้างวัตถุของคลาส Android Dialog
  3. เพิ่มสไตล์และข้อความที่กำหนดเองตามไฟล์ XML
  4. เรียกdialog.show()วิธีการ

1

ใน Kotlin:

fun showListDialog(context: Context){
    // setup alert builder
    val builder = AlertDialog.Builder(context)
    builder.setTitle("Choose an Item")

    // add list items
    val listItems = arrayOf("Item 0","Item 1","Item 2")
    builder.setItems(listItems) { dialog, which ->
        when (which) {
            0 ->{
                Toast.makeText(context,"You Clicked Item 0",Toast.LENGTH_LONG).show()
                dialog.dismiss()
            }
            1->{
                Toast.makeText(context,"You Clicked Item 1",Toast.LENGTH_LONG).show()
                dialog.dismiss()
            }
            2->{
                Toast.makeText(context,"You Clicked Item 2",Toast.LENGTH_LONG).show()
                dialog.dismiss()
            }
        }
    }

    // create & show alert dialog
    val dialog = builder.create()
    dialog.show()
}

1
เพิ่มคำอธิบายลงในคำตอบของคุณ
แมทธิวส์ซันนี่

1
คำอธิบายประเภทใด
Varsha Prabhakar

1

นี่คือวิธีการแสดงไดอะล็อกเลย์เอาต์ที่กำหนดเองพร้อมรายการไอเท็มที่กำหนดเองสามารถปรับแต่งได้ตามความต้องการ

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

ขั้นตอนที่ - 1 สร้างเลย์เอาต์ของ DialogBox เช่น: -

R.layout.assignment_dialog_list_view

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/rectangle_round_corner_assignment_alert"
    android:orientation="vertical">
    <TextView
        android:id="@+id/tv_popup_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:singleLine="true"
        android:paddingStart="4dp"
        android:text="View as:"
        android:textColor="#4f4f4f" />

    <ListView
        android:id="@+id/lv_assignment_users"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>

ขั้นตอนที่ - 2 สร้างเค้าโครงรายการในแบบกำหนดเองตามตรรกะทางธุรกิจของคุณ

R.layout.item_assignment_dialog_list_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:padding="4dp"
    android:orientation="horizontal">
    <ImageView
        android:id="@+id/iv_user_profile_image"
        android:visibility="visible"
        android:layout_width="42dp"
        android:layout_height="42dp" />
    <TextView
        android:id="@+id/tv_user_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="8dp"
        android:layout_marginStart="8dp"
        android:paddingBottom="8dp"
        android:textColor="#666666"
        android:textSize="18sp"
        tools:text="ABCD XYZ" />
</LinearLayout>

STEP - 3 สร้างคลาส data model ที่คุณต้องการ

public class AssignmentUserModel {

private String userId;
private String userName;
private String userRole;
private Bitmap userProfileBitmap;

public AssignmentUserModel(String userId, String userName, String userRole, Bitmap userProfileBitmap) {
    this.userId = userId;
    this.userName = userName;
    this.userRole = userRole;
    this.userProfileBitmap = userProfileBitmap;
}


public String getUserId() {
    return userId;
}

public void setUserId(String userId) {
    this.userId = userId;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getUserRole() {
    return userRole;
}

public void setUserRole(String userRole) {
    this.userRole = userRole;
}

public Bitmap getUserProfileBitmap() {
    return userProfileBitmap;
}

public void setUserProfileBitmap(Bitmap userProfileBitmap) {
    this.userProfileBitmap = userProfileBitmap;
}

}

ขั้นตอนที่ - 4 สร้างอะแดปเตอร์ที่กำหนดเอง

public class UserListAdapter extends ArrayAdapter<AssignmentUserModel> {
private final Context context;
private final List<AssignmentUserModel> userList;

public UserListAdapter(@NonNull Context context, int resource, @NonNull List<AssignmentUserModel> objects) {
    super(context, resource, objects);
    userList = objects;
    this.context = context;
 }

@SuppressLint("ViewHolder")
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.item_assignment_dialog_list_layout, parent, false);
    ImageView profilePic = rowView.findViewById(R.id.iv_user_profile_image);
    TextView userName = rowView.findViewById(R.id.tv_user_name);
    AssignmentUserModel user = userList.get(position);

    userName.setText(user.getUserName());

    Bitmap bitmap = user.getUserProfileBitmap();

    profilePic.setImageDrawable(bitmap);

    return rowView;
}

}

ขั้นตอนที่ - 5 สร้างฟังก์ชั่นนี้และให้ ArrayList ของโมเดลข้อมูลข้างต้นในวิธีนี้

// Pass list of your model as arraylist
private void showCustomAlertDialogBoxForUserList(ArrayList<AssignmentUserModel> allUsersList) {
        final Dialog dialog = new Dialog(mActivity);
        dialog.setContentView(R.layout.assignment_dialog_list_view);
        if (dialog.getWindow() != null) {
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // this is optional
        }
        ListView listView = dialog.findViewById(R.id.lv_assignment_users);
        TextView tv = dialog.findViewById(R.id.tv_popup_title);
        ArrayAdapter arrayAdapter = new UserListAdapter(context, R.layout.item_assignment_dialog_list_layout, allUsersList);
        listView.setAdapter(arrayAdapter);
        listView.setOnItemClickListener((adapterView, view, which, l) -> {
            Log.d(TAG, "showAssignmentsList: " + allUsersList.get(which).getUserId());
           // TODO : Listen to click callbacks at the position
        });
        dialog.show();
    }

ขั้นตอน - 6 ให้พื้นหลังมุมกลมกับกล่องโต้ตอบ

@ drawable / rectangle_round_corner_assignment_alert

    <?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ffffffff" />
    <corners android:radius="16dp" />
    <padding
        android:bottom="16dp"
        android:left="16dp"
        android:right="16dp"
        android:top="16dp" />
</shape>

0

การสร้างวิธีการที่จะเรียกหลังจากการสร้างหน่วย EditText ใน AlertDialog นั้นราบรื่นกว่าสำหรับการใช้งานทั่วไปหรือไม่?

public static void EditTextListPicker(final Activity activity, final EditText EditTextItem, final String SelectTitle, final String[] SelectList) {
    EditTextItem.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(activity);
            builder.setTitle(SelectTitle);
            builder.setItems(SelectList, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int item) {
                    EditTextItem.setText(SelectList[item]);
                }
            });
            builder.create().show();
            return false;
        }
    });
}

0
private void AlertDialogue(final List<Animals> animals) {
 final AlertDialog.Builder alertDialog = new AlertDialog.Builder(AdminActivity.this);
 alertDialog.setTitle("Filter by tag");

 final String[] animalsArray = new String[animals.size()];

 for (int i = 0; i < tags.size(); i++) {
  animalsArray[i] = tags.get(i).getanimal();

 }

 final int checkedItem = 0;
 alertDialog.setSingleChoiceItems(animalsArray, checkedItem, new DialogInterface.OnClickListener() {
  @Override
  public void onClick(DialogInterface dialog, int which) {

   Log.e(TAG, "onClick: " + animalsArray[which]);

  }
 });


 AlertDialog alert = alertDialog.create();
 alert.setCanceledOnTouchOutside(false);
 alert.show();

}

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