2013-03-05 4 views
1

В моем приложении для Android я показываю диалоговое окно, содержащее edittext. Это DialogBox отображается с помощью PreferenceCategory .My xml файл выглядитПолучить событие в диалоговом окне (ОК, Отмена) нажата (Android)

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 

    <PreferenceCategory android:title="@string/security_setting_edittext_hint" > 
     <EditTextPreference 
     android:dialogTitle="@string/security_setting_button" 
     android:key="set_password_preference" 
     android:summary="@string/set_password_summary" 
     android:title="@string/security_setting_button" 
     android:inputType="number" 
     android:icon="@drawable/lock" 
     /> 
    </PreferenceCategory> 

</PreferenceScreen> 

Мой файл Java выглядит

public class Settings extends PreferenceActivity { 

    Dialog setPasswordDialog; 
    EditText setPassword; 
    EditTextPreference editPreference; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.setTitle("Settings"); 
     addPreferencesFromResource(R.xml.preference_authentication); 
     editPreference=(EditTextPreference) findPreference("set_password_preference"); 

} 

Там не проблема при отображении dialog, но теперь я хочу Тхо получить событие, когда Ok и Отмена нажмите кнопку из диалогового окна, чтобы что-то сделать. Пожалуйста, предоставьте мне решение.

+0

Как вы хотите использовать диалоговое окно, отображаемое с помощью PreferenceCategory, вам нужно будет создать пользовательскую EditTextPreference, как показано в ответе @appsroxcom. – appsroxcom

ответ

1
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
@Override 
public void onClick(DialogInterface dialog, int which) { 
    switch (which){ 
    case DialogInterface.BUTTON_POSITIVE: 
     //Yes button clicked 
     break; 

    case DialogInterface.BUTTON_NEGATIVE: 
     //No button clicked 
     break; 
    } 
    } 


}; 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener) 
    .setNegativeButton("No", dialogClickListener).show(); 
3

Если я получаю свой вопрос правильно, вы хотите, чтобы справиться с «Ok» и «Отмена» событие, а затем выполнить некоторые действия, основанные на ответ.

+0

Спасибо за ответ. Если мое понимание этого ответа верное, я не хочу создавать новое диалоговое окно. Я хочу использовать диалоговое окно, отображаемое с использованием PreferenceCategory – void

3

Вам необходимо будет создать свой собственный текст для редактирования текста следующим образом.

public class MyEditTextPreference extends EditTextPreference { 

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

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     switch (which) { 
     case DialogInterface.BUTTON_POSITIVE: 
     // Put your logic here for Ok button press 
     break; 

     case DialogInterface.BUTTON_NEGATIVE: 
     // Put your logic here for Cancel button press 
     break;  
     } 
     super.onClick(dialog, which); 
    } 
} 

Затем используйте его в XML-файле следующим образом:

<com.package.MyEditTextPreference 
android:dialogTitle="@string/security_setting_button" 
android:key="set_password_preference" 
android:summary="@string/set_password_summary" 
android:title="@string/security_setting_button" 
android:inputType="number" 
android:icon="@drawable/lock" 
/> 

где com.package должен быть заменен фактическим пакетом в проекте, где вы создаете MyEditTextPreference

+0

, этот пример действительно gud, но что, если мы не хотим отклонять диалог, если edittext имеет значение null ... , –

Смежные вопросы