Android-окно оповещения о предупреждении - PullRequest
1 голос
/ 18 ноября 2011

У меня небольшая проблема с установкой выбранного по умолчанию элемента в диалоге оповещений. Вот что я использую в своем коде:

if(memory>megAvailable){
        selected = 0;
    } else if(megAvailable>memory){
        selected = 1;
    }

    AlertDialog.Builder builder = new AlertDialog.Builder(this.getParent());
    builder.setTitle("Select Storage Path");
    builder.setSingleChoiceItems(items, selected, 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.setNegativeButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
                mHandlerUpdateUi.post(mUpdateUpdateUi);     
        }
        });
        AlertDialog alert = builder.create();

Итак, моя проблема сейчас в том, что я устанавливаю выбранный элемент в зависимости от некоторых вычислений, и если я ничего не выбираю и нажимаю OK, независимо от того, выбран ли я элемент по умолчанию, он снова создает диалоговое окно, потому что это идея, если пользователь ничего не выбрал. Я пытался установить item=selected; или selected=item;, но это не работает. Я знаю, что моя проблема логична, но я не могу понять это. Любые предложения, как заставить вещи работать?

1 Ответ

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

Вы можете просто поместить код, который устанавливает ваш storagePath, в onClickHandler, присоединенный к NegativeButton:

final int defaultSelected = selected +1; //this is final since you need to access it in the anonymous inner class; we're adding 1 since your value that you write seems to be either 1 or 2.
 builder.setNegativeButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
                mHandlerUpdateUi.post(mUpdateUpdateUi);     
                editor.putInt("storagePath", defaultSelected);
                editor.commit();
        }
        });
...