2014-02-16 5 views
0

У меня возникли проблемы с отображением нескольких всплывающих окон. Прямо сейчас у меня есть AlertDialog, который появляется с помощью EditView для того, чтобы пользователь ввел имя файла, который они хотели бы создать, который затем передал бы в объект File, а затем должен появиться Writer и новый Dialog спрашивая пользователя, хотят ли они запустить музыкальный проигрыватель.Как показать всплывающие окна последовательного диалога?

Однако, как сейчас, после того, как я нажимаю «Ok» на первом AlertDialog, абсолютно ничего не происходит. Я не уверен, что я делаю неправильно. Любая помощь? Вот мой код.

//naming the playlist 
    AlertDialog.Builder alert = new AlertDialog.Builder(this); 

    alert.setTitle("Exporting Playlist"); 
    alert.setMessage("Enter the name of the playlist!"); 

    // Set an EditText view to get user input 
    final EditText input = new EditText(this); 
    alert.setView(input); 

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
      name = input.getText().toString() + ".m3u"; 
      popup = true; 
     } 
    }); 

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
     // Canceled. 
     } 
    }); 

    alert.show(); 


    //after the playlist is named, put songs into file 
    if (popup){ 
     popup = false; 
     final File list = new File(mp3folderPath + name); 
     FileWriter writer; 
     BufferedWriter write; 

     ArrayList<String> playlist = new ArrayList<String>(); 
     Log.d("poo", "mAdapter count: "+mAdapter.getCount()); 
     for (int i=0; i < mAdapter.getCount(); i++) { 
      playlist.add(mAdapter.getItem(i)); 
     } 
     Log.d("poo", playlist.toString()); 

     //write the songs to the m3u playlist 
     writer = new FileWriter(list); 
     write = new BufferedWriter(writer); 
     for (int i = 0; i<playlist.size(); i++){ 
      String[] name = playlist.get(i).split(" : "); 
      Log.d("poo", name[0]); 
      write.append(name[0]+"\n"); 
     } 
     write.close(); 

     //popup window 
     CharSequence choices[] = new CharSequence[] {"Launch Music Player", "Quit"}; 

     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Exported playlist!"); 
     builder.setItems(choices, new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       if (which == 0) { 
        Intent intent = new Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER); 
        startActivity(intent); 
        finish(); 
       } 
       else { 
        finish(); 
       } 
      } 
     }); 
    builder.show(); 
    } 
} 
+0

только предположение, почему вы должны написать условие, если (всплывающее окно), не может вы вызываете функцию, которая будет делать то, что написано в этом состоянии, когда пользователь нажимает «ok», – user2450263

ответ

2

Чтобы показать последовательное всплывающее окно, условия и код для последовательного всплывающего окна (ы) должны быть доступны из одного в другой ,
AlertDialog1 должен содержать код, который будет показывать AlertDialog2 ...

попробовать что-то вроде этого:

//naming the playlist 
       AlertDialog.Builder alert = new AlertDialog.Builder(this); 

       alert.setTitle("Exporting Playlist"); 
       alert.setMessage("Enter the name of the playlist!"); 

       // Set an EditText view to get user input 
       final EditText input = new EditText(this); 
       alert.setView(input); 

       alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        //check if the name is not null 
         name = input.getText().toString() + ".m3u"; 
        //Now instead of popup = true; 
       //call func to name the playlist and next dialog 
         callNextDialog(); 
        } 
       }); 

       alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
        // Canceled. 
        } 
       }); 

       alert.show(); 


       //after the playlist is named, put songs into file 
     //  if (popup){ 
     //   popup = false; 
     //   } 

        public void callNextDialog(){ 
final File list = new File(mp3folderPath + name); 
        FileWriter writer; 
        BufferedWriter write; 

        ArrayList<String> playlist = new ArrayList<String>(); 
        Log.d("poo", "mAdapter count: "+mAdapter.getCount()); 
        for (int i=0; i < mAdapter.getCount(); i++) { 
         playlist.add(mAdapter.getItem(i)); 
        } 
        Log.d("poo", playlist.toString()); 

        //write the songs to the m3u playlist 
        writer = new FileWriter(list); 
        write = new BufferedWriter(writer); 
        for (int i = 0; i<playlist.size(); i++){ 
         String[] name = playlist.get(i).split(" : "); 
         Log.d("poo", name[0]); 
         write.append(name[0]+"\n"); 
         write.close(); 
         //popup window 
      CharSequence choices[] = new CharSequence[] {"Launch Music Player", "Quit"}; 

         AlertDialog.Builder builder = new AlertDialog.Builder(this); 
         builder.setTitle("Exported playlist!"); 
         builder.setItems(choices, new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           if (which == 0) { 
         Intent intent = new Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER); 
            startActivity(intent); 
            finish(); 
           } 
           else { 
            finish(); 
           } 
          } 
         }); 
        builder.show(); 
        } 
       } 
2

AlertDialog.show() не ждет, когда диалог исчезнет. Он немедленно возвращается. Это означает, что ВСЕ логика того, что делать после того, как пользователь делает выбор, должен войти в функцию onClick положительной кнопки диалога.

В принципе, все в вашей, если (всплывающее окно), код должен быть в обработчике OnClick

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