จะใช้ DialogPreference การยืนยัน (ใช่ / ไม่ใช่) ได้อย่างไร


คำตอบ:


292

นั่นคือกล่องโต้ตอบการแจ้งเตือนที่เรียบง่ายFederico มอบไซต์ที่คุณสามารถค้นหาสิ่งต่างๆได้

นี่คือตัวอย่างสั้น ๆ ของวิธีสร้างกล่องโต้ตอบการแจ้งเตือน

new AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Do you really want to whatever?")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int whichButton) {
        Toast.makeText(MainActivity.this, "Yaay", Toast.LENGTH_SHORT).show();
    }})
 .setNegativeButton(android.R.string.no, null).show();

3
ฉันรู้วิธีสร้าง Dialog แต่คำถามของฉันเกี่ยวกับความชอบ
sh1ng

1
คำถามของคุณเกี่ยวกับความชอบ? ตกลง. ดูที่นี่: kaloer.com/android-preferences
Maaalte

1
ฉันได้อ่านที่มานี้แล้ว ฉันสามารถสร้างค่ากำหนดเองที่สมัครเป็นสมาชิก OnClick และจัดการได้ แต่เป็นวิธีที่ง่ายที่สุดหรือไม่
sh1ng

ฉันคิดอย่างนั้นอย่างน้อยฉันก็ไม่รู้วิธีอื่นที่ง่ายกว่านี้
Maaalte

1
ใช้นำเข้า android.support.v7.app.AlertDialog; เพื่อให้ดูดีขึ้นโดยไม่มีธีม
Majurageerthan

9

Android มาพร้อมกับคลาส YesNoPreference ในตัวที่ตอบสนองสิ่งที่คุณต้องการ (กล่องโต้ตอบยืนยันพร้อมตัวเลือกใช่และไม่ใช่) ดูรหัสที่มาอย่างเป็นทางการที่นี่

ขออภัยอยู่ในcom.android.internal.preferenceแพ็คเกจซึ่งหมายความว่าเป็นส่วนหนึ่งของ API ส่วนตัวของ Android และคุณไม่สามารถเข้าถึงได้จากแอปพลิเคชันของคุณ (คลาส API ส่วนตัวอาจเปลี่ยนแปลงได้โดยไม่ต้องแจ้งให้ทราบล่วงหน้าด้วยเหตุนี้ Google จึงไม่อนุญาตให้คุณเข้าถึง)

วิธีแก้ไข:เพียงสร้างคลาสใหม่ในแพ็คเกจแอปพลิเคชันของคุณโดยคัดลอก / วางซอร์สโค้ดอย่างเป็นทางการจากลิงค์ที่ฉันให้ไว้ ฉันได้ลองสิ่งนี้แล้วและใช้งานได้ดี (ไม่มีเหตุผลว่าทำไมจึงไม่ควรทำ)

จากนั้นคุณสามารถเพิ่มลงในpreferences.xmlความชอบอื่น ๆ ของคุณได้ ตัวอย่าง:

<com.example.myapp.YesNoPreference
    android:dialogMessage="Are you sure you want to revert all settings to their default values?"
    android:key="com.example.myapp.pref_reset_settings_key"
    android:summary="Revert all settings to their default values."
    android:title="Reset Settings" />

ซึ่งมีลักษณะดังนี้:

ภาพหน้าจอ


1
ทางออกที่ดี! แต่มีปัญหากับหนึ่งในผู้สร้างของคลาสนี้! มันอ้างอิงถึงแหล่งทรัพยากร (com.android.internal.R.attr.yesNoPreferenceStyle)! ซึ่งไม่สามารถแก้ไขได้. วิธีแก้ปัญหาคืออะไร? ฉันต้องสร้างหนึ่งในโปรเจ็กต์ของฉันเองหรือไม่!
reubenjohn

3

ใช้ Intent Preference หากคุณกำลังใช้หน้าจอ xml ค่ากำหนดหรือคุณกำลังใช้หน้าจอที่กำหนดเองโค้ดจะเป็นดังนี้

intentClearCookies = getPreferenceManager().createPreferenceScreen(this);
    Intent clearcookies = new Intent(PopupPostPref.this, ClearCookies.class);

    intentClearCookies.setIntent(clearcookies);
    intentClearCookies.setTitle(R.string.ClearCookies);
    intentClearCookies.setEnabled(true);
    launchPrefCat.addPreference(intentClearCookies);

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

public class ClearCookies extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    showDialog();
}

/**
 * @throws NotFoundException
 */
private void showDialog() throws NotFoundException {
    new AlertDialog.Builder(this)
            .setTitle(getResources().getString(R.string.ClearCookies))
            .setMessage(
                    getResources().getString(R.string.ClearCookieQuestion))
            .setIcon(
                    getResources().getDrawable(
                            android.R.drawable.ic_dialog_alert))
            .setPositiveButton(
                    getResources().getString(R.string.PostiveYesButton),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            //Do Something Here

                        }
                    })
            .setNegativeButton(
                    getResources().getString(R.string.NegativeNoButton),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            //Do Something Here
                        }
                    }).show();
}}

อย่างที่บอกไปก่อนหน้านี้มีหลายวิธีที่ทำได้ นี่เป็นวิธีหนึ่งที่คุณสามารถทำงานของคุณได้โปรดยอมรับคำตอบหากคุณรู้สึกว่าได้สิ่งที่คุณต้องการแล้ว


ขอบคุณ! นี่เป็นสิ่งที่ฉันต้องการเกือบทั้งหมดสำหรับแอปของฉันเนื่องจากฉันกำลังเรียกใช้กล่องโต้ตอบจากบริการและในกรณีของฉันฉันต้องการกิจกรรมเพื่อโฮสต์กล่องโต้ตอบ
Ralph Ritoch

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