2011-09-23 5 views
1

PreferenceActivityEditTextPreference이 있습니다. 사용자가 EditTextPreference을 클릭하면 대화 상자가 표시됩니다. 대화 상자에서 사용자는 값을 입력 할 수 있으며 대화 상자에는 "확인"및 "취소"버튼이 있습니다. 값을 확인하려면 ok 버튼의 클릭 이벤트를 호출하고 싶지만 클릭을 호출하는 방법을 모르겠습니다.EditTextPreference에서 ok 버튼을 호출하는 방법

나는 EditTextPreference.setOnPreferenceChangeListener()을 사용할 수 있지만, 확인 버튼 클릭 이벤트를 사용할 수 있는지 알고 싶습니다.

+0

그것은 사용자 정의 EditTextPreference를 작성이 가능합니다. 이것 좀 봐 : http://stackoverflow.com/a/15219411/2107118 – appsroxcom

답변

3

을 할 수 있습니다 ' 기본 설정은 내부 AlertDialog.Builder을 사용하고 환경 설정을 클릭 할 때마다 새 대화 상자를 만들기 때문에 t 옵션을 사용하십시오. 다음 문제는 대화 작성 도구가 귀하를 위해 클릭 수신기를 설정하고 귀하가이를 무시하는 경우 버튼 클릭의 닫기 동작을 파괴 할 수 있다는 것입니다.

유효 입력에서만 닫히는 환경 설정이 필요했기 때문에이 문제가 발생했습니다. 그렇지 않으면 토스트가 표시되고 사용자가 취소 할 수 없으면 취소를 눌러야합니다.

(당신이 정말로 정확하게이 문제에 대한 솔루션을 필요로하는 경우) 당신은 검증 DialogPreference here 내가 나 자신을 쓴 검증 EditTextPreference here의 일반적인 해결책을 찾을 수 있습니다.

+0

답변을 주셔서 감사합니다 – pengwang

+0

@Knickedi 제공된 링크가 깨진 것으로 보입니다. 당신의 솔루션은 여전히 ​​어딘가에 있습니까? – THelper

+0

힌트에 감사드립니다. 프로젝트가 GitHub로 이동하면 코드가 있음을 알 수 있습니다 (링크 수정). – Knickedi

1

귀하의 환경 활동이 구현 될 나타나지 않는

OnSharedPreferenceChangeListener

당신은 질문에 대한 우수 답변을 읽어 할 수 있습니다 : 사실 Updating EditPreference

+1

감사합니다. 내 문제를 해결하기 위해 OnSharedPreferenceChangeListener를 사용했지만 @Knickedi 대답이 더 연습이므로 그의 답변에 동의합니다. 감사합니다 – pengwang

2

EditTextPreference를 확장하여 클릭 핸들러를 제어 할 수 있습니다. 대신 <EditTextPreference/>의 XML로

package myPackage; 
public class CustomEditTextPreference extends EditTextPreference { 

    public CustomEditTextPreference(Context context) { 
     super(context); 
    } 

    public CustomEditTextPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomEditTextPreference(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     if (which == DialogInterface.BUTTON_POSITIVE) { 
      // add Handler here 
     } 
     super.onClick(dialog, which); 
    } 

} 

은 다음과 같이이를 참조 :

<myPackage.CustomEditTextPreference android:dialogTitle="Registration Key" android:key="challengeKey" android:title="Registration Key" android:summary="Click here to enter the registration key you received by email."/> 
+0

나는 처음에 이것을 단지 하나의 생성자로 시도했고, "원인 : android.view.InflateException : 이진 XML 파일 라인 # 9 : Error inflating class"를 얻었다. 나는 그것을 작동 시키므로 3 개의 생성자 모두를 오버라이드해야한다! – wrapperapps

+1

예, 호출되는 생성자는 인스턴스화되는 방식 (XML인지 여부)에 따라 다릅니다. 모든 옵션을 사용하여 3 개의 생성자를 모두 재정의합니다. – tmanthey