2015-08-09 9 views
0

Я пытаюсь запомнить флажок в диалоге, но в сравнении помню == false переменная помнить еще не изменила ее значение. В цикле повторяется столько раз, сколько размер lelements_tmp перед вызовом showDialogSameFile(), поэтому я также не могу использовать переменную, помните в цикле. Как мне это сделать? Заранее спасибо.Помните галочку в диалоговом окне

private boolean remember = false; 

// in the program 
// add files to List lelements_tmp 
while (i < lelements_tmp.size()) { 
    File fto = new File(lelements_tmp.get(i).getFile()); 
    String to = null; 
    try { 
     to = fto.getCanonicalPath(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    if (fto.exists()) { 
     showDialogSameFile(fto, to, i); 
     i++; 
     continue; 
    } 

    thread(i); 
    i++; 
} 

private void showDialogSameFile(File f, String to, final int i) { 
     TextView title = null; 
     if (f.isDirectory()) 
      title = this.getTitle("The directory " + to + " already exists. Do you want to replace the contents?"); 
     else if (f.isFile()) 
      title = this.getTitle("The file " + to + " already exists. Do you want to replace it?"); 

     String[] item = {"Apply to all"}; 
     AlertDialog ad = new AlertDialog.Builder(context) 
       .setCustomTitle(title) 
       .setMultiChoiceItems(item, null, 
         new DialogInterface.OnMultiChoiceClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) { 
           if (isChecked) 
            remember = true; 
          } 
         }) 
       .setPositiveButton("Aceptar", 
         new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           thread(i); 
          } 
         }) 
       .setNegativeButton("Cancelar", 
         new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 

          } 
         }) 
       .create(); 
    if (remember == false) 
      ad.show(); 
} 
+1

Вау, вы смешанный порядок исполнения там, вы никогда не увидите слишком много, помните, что являетесь истинным таким образом. Я предполагаю, что вы пытаетесь использовать это после отклонения диалога? Добавить слушателя в диалоговом окне закрыть, а затем спросить, является ли помнить false или нет. –

ответ

0

Мне пришлось реорганизовать код немного, но в основном с этой работой. Необходимо вызвать метод из потока, отличного от UI. Основываясь на этом ответе https://stackoverflow.com/a/11369224/5089855

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 

import java.util.concurrent.Semaphore; 

public class Proof { 

    private Semaphore mutex = new Semaphore(0, true); 
    private boolean remember = false; 
    private Activity context; 

    public Proof(Activity context) { 
     this.context = context; 
    } 

    private boolean showDialogMismoArchivo() { 
     context.runOnUiThread(new Runnable() { 
      public void run() { 
       String[] item = {"Apply all"}; 
       AlertDialog ad = new AlertDialog.Builder(context) 
         .setTitle("¿Reemplazar?") 
         .setMultiChoiceItems(item, null, 
           new DialogInterface.OnMultiChoiceClickListener() { 
            @Override 
            public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) { 
             if (isChecked) 
              remember = true; 
             else 
              remember = false; 
            } 
           }) 
         .setPositiveButton("Ok", 
           new DialogInterface.OnClickListener() { 
            @Override 
            public void onClick(DialogInterface dialog, int which) { 
             mutex.release(); 
            } 
           }) 
         .setNegativeButton("Cancel", 
           new DialogInterface.OnClickListener() { 
            @Override 
            public void onClick(DialogInterface dialog, int which) { 
             mutex.release(); 
            } 
           }) 
         .create(); 
       ad.show(); 
      } 
     }); 

     try { 
      mutex.acquire(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     return remember; 
    } 
} 
Смежные вопросы