Android устанавливает выбранный элемент в диалоговом окне предупреждения - PullRequest
6 голосов
/ 18 ноября 2011

Я создаю диалог оповещения в начале своего приложения, чтобы пользователь мог выбрать, где хранить данные, которые мое приложение загружает из Интернета. То, чего я хочу достичь сейчас, это в зависимости от размера внутреннего / внешнего хранилища, которое я хочу установить для выбранного элемента. Вот код, который я использую для создания диалога:

@SuppressWarnings("static-access")
public void createDialog(){


    final CharSequence[] items = {"Phone Memory - "+memorysize+" free space", "SD Card - "+megAvailable+" MB free space"};

    final int userId = rpc.getUserId(this);
    final String servername = rpc.getCurrentServerName(this);

    SharedPreferences stampiiSettings = PreferenceManager.getDefaultSharedPreferences(MyCollectionList.this);
    final SharedPreferences.Editor editor = stampiiSettings.edit();

    AlertDialog.Builder builder = new AlertDialog.Builder(this.getParent());
    builder.setTitle("Select Storage Path");
    builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {

            if(item == 0){

                rpc.createFoldersInInternalStorage(servername, userId, MyCollectionList.this);
                Toast.makeText(getApplicationContext(), "Selected Storage Path : Phone Memory", Toast.LENGTH_SHORT).show();
                editor.putInt("storagePath", 1);
                editor.commit();
            } else if (item == 1){

                rpc.createFoldersInExternalStorage(servername, userId, MyCollectionList.this);
                Toast.makeText(getApplicationContext(), "Selected Storage Path : SD Card", Toast.LENGTH_SHORT).show();
                editor.putInt("storagePath", 2);
                editor.commit();
            }
        }});

        builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
                mHandlerUpdateUi.post(mUpdateUpdateUi); // update UI            
        }
        });
        AlertDialog alert = builder.show();
}

И еще одна вещь, которую я хочу достичь, как я могу запретить пользователю закрывать диалог оповещения, если он не выбрал ни одного элемента. Я не хочу закрывать диалог нажатием кнопки назад или нажатием кнопки ОК. Любые идеи / предложения / помощь приветствуются!

Ответы [ 2 ]

18 голосов
/ 18 ноября 2011

Сделайте что-то вроде этого:

int selected = 0; // or whatever you want
builder.setSingleChoiceItems(items, selected, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
              //onclick
    }});
3 голосов
/ 18 ноября 2011

для кнопки закрытия вы можете определить кнопку отмены с помощью кнопки ok следующим образом:

builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // no need to write anything here just implement this interface into this button
        }
});

для выбранного элемента вы можете либо сделать счетчик локальным для этого класса, либо вы можете присвоить это значение любомупеременная, как выбрано.

int selected = 0; // if you want in integer or 
String selected = "internal"; // you can go with string

Теперь вы можете установить значение по умолчанию для этого и получить значение, когда вы нажимаете кнопку ОК в диалоговом окне

builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
            // here get the selected item value 
    }
});
...