확인 (예 / 아니오) 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
대화 상자를 만드는 방법을 알고 있지만 기본 설정에 대한 질문입니다.
sh1ng

1
귀하의 질문은 선호도에 관한 것입니까? 괜찮아. 여기에서보세요 : kaloer.com/android-preferences
Maaalte

1
나는 이미이 소스를 읽었습니다. OnClick에 가입 한 사용자 지정 기본 설정을 만들어 처리 할 수 ​​있지만 가장 쉬운 방법입니까?
sh1ng

적어도 나는 더 쉬운 다른 방법을 모릅니다.
Maaalte

1
import android.support.v7.app.AlertDialog를 사용하십시오. 주제없는 더 나은 모습을 위해
majurageerthan

9

Android에는 원하는대로 정확하게 수행하는 기본 제공 YesNoPreference 클래스가 있습니다 (예 및 아니요 옵션이있는 확인 대화 상자). 여기 에서 공식 소스 코드를 참조 하십시오 .

안타깝게도 com.android.internal.preference패키지에 포함되어있어 Android의 비공개 API의 일부이며 애플리케이션에서 액세스 할 수 없습니다 (비공개 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 2014 년

3

기본 설정 xml 화면을 사용하는 경우 Intent Preference를 사용하고 사용자 지정 화면을 사용하는 경우 코드는 다음과 같습니다.

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);

그리고 Create Activity Class는 아래와 비슷합니다. 다른 접근 방식으로 다른 사람으로서 당신이 좋아하는 접근 방식을 사용할 수 있습니다.

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 2014 년

그것을 사랑하십시오. IMHO 장황하지만 승인되고 올바른 방법
John
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.