2012-06-08 3 views
1

У меня есть DialogFragment, который выдает настраиваемый селектор мелодий звонка. Однако после выбора одного из них он не получает нужного Ringtone и щелкает OK. Любая идея, что неправильно ниже?RingtoneManager Cursor Not Returning Selected Ringtone Details

Диалог создается с помощью этой

@Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     rm = new RingtoneManager(getActivity()); 
     ringtones = rm.getCursor(); 

     int selected = -1; 

     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setTitle(R.string.ringtone); 
     builder.setSingleChoiceItems(ringtones, 
       selected, 
       ringtones.getColumnName(RingtoneManager.TITLE_COLUMN_INDEX), 
       mChoiceListener); 
     builder.setPositiveButton("OK", this); 
     builder.setNegativeButton("Cancel", this); 
     return builder.create(); 

    } 

    private DialogInterface.OnClickListener mChoiceListener = 
     new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int position) { 
       ringtones.moveToPosition(position); 
      } 

    }; 

При выборе кнопки OK, она захватывается

public void onClick(DialogInterface dialog, int which) { 
     Log.d("DayPickerFragment", "onClick"); 
     switch(which) { 
      case Dialog.BUTTON_NEGATIVE: 
       dialog.cancel(); 
       break; 

      case Dialog.BUTTON_POSITIVE: 
       Uri uri = rm.getRingtoneUri(ringtones.getPosition()); 
       Ringtone r = RingtoneManager.getRingtone(getActivity(), uri); 

       /*** etc ***/ 

       /*** returned ringtone doesn't match what was selected ***/ 
       dialog.dismiss(); 
       break; 
     } 
    } 

Является ли это вызвано метод rm.getRingtoneUri(position) не соответствующий мелодии курсор ? Если да, то как вы получаете реальный Uri выбранного пункта?

Любая помощь приветствуется.

ответ

0

Не знаете, почему это не работает. Я предполагаю, что я ничего не понимаю о объекте Cursor.

Однако, вот что в конечном итоге с помощью частной переменной, чтобы переместить его вокруг

@Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     rm = new RingtoneManager(getActivity()); 
     ringtones = rm.getCursor(); 

     int selected = -1; 

     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setTitle(R.string.ringtone); 
     builder.setSingleChoiceItems(ringtones, 
       selected, 
       ringtones.getColumnName(RingtoneManager.TITLE_COLUMN_INDEX), 
       this); 
     builder.setPositiveButton("OK", this); 
     builder.setNegativeButton("Cancel", this); 
     return builder.create(); 
    } 

public void onClick(DialogInterface dialog, int position) { 
     switch(position) { 
      case Dialog.BUTTON_NEGATIVE: 
       mp.reset(); 
       mp.release(); 
       dialog.cancel(); 
       break; 

      case Dialog.BUTTON_POSITIVE: 
       mp.reset(); 
       mp.release(); 

       Uri uri2 = rm.getRingtoneUri(mPosition); 
       Ringtone r = RingtoneManager.getRingtone(getActivity(), uri2); 
       /*** Use ringtone as needed ***/ 
       dialog.dismiss(); 
       break; 

      default: // dialog click 
       ringtones.moveToPosition(position); 
       mPosition = position; 

       Uri uri = rm.getRingtoneUri(mPosition); 
       mp.reset(); 
       try { 
        mp.setDataSource(getActivity(), uri); 
        mp.prepare(); 
        mp.start(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       break; 
     } 
    } 

Я делаю несколько дополнительных вещей, как переходящий в Ringtone и установить его в качестве выбранного, если он найден , но это основная идея.