2013-07-19 38 views
2

在我的應用程序中我有一些佈局來編輯任務,並選擇RingTone並將其保存到數據庫中。 當我更新任務時,我也會更新鈴聲名稱。我使用的是鈴聲選擇器,啓動一個新的Intent並在onActivityResult()方法中獲取選定的鈴聲uri。Android鈴聲選擇器刷新活動,爲什麼?

問題在於,每當我點擊選擇新的RingTone頁面重新加載,並且我丟失了來自數據庫的所有填充數據。

我該如何解決這個問題。有沒有辦法打開鈴聲選擇器,而無需在選擇鈴聲後重新加載完整的活動?

這裏是我打開選擇器:

protected void openRingtoneDialog() { 

    final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getString(R.string.ringtone_choose)); 

    if (mAlarmTonUri != null) { 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, mAlarmTonUri); 
    } 
    else { 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null); 
    } 
    startActivityForResult(intent, RINGTONE_RESULT); 
} 

,在這裏,我如何獲得所選擇的鈴聲。

@Override 
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 

    String ringTonTitle = ""; 

    // Get the result from RingtoneActivity 
    if (resultCode == RESULT_OK && requestCode == RINGTONE_RESULT) { 
     mAlarmTonUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);   
     if (mAlarmTonUri != null) { 
      mAlarmTonValue = mAlarmTonUri.toString(); 
      ringTonTitle = RingtoneManager.getRingtone(this, mAlarmTonUri).getTitle(this);    
     } 
     else { 
      ringTonTitle = "unknow"; 
     } 

     mAlarmTonTextView.setText(ringTonTitle); 
    } 

謝謝你的幫忙!

+0

你有沒有檢查android:configChanges?是「orientation | screenSize」還是其他因素殺了你的活動? – kvh

+0

我嘗試將orientation | screenSize放入我的Manifest中,但同樣的問題仍然存在。每次我選擇鈴聲時都會刷新活動,並且我放棄了在其他字段中輸入的所有數據。請幫幫我! – Mock

+0

嘗試在調試模式下定位,在生命週期方法上設置一個斷點,如onDestroy等。看看是否發生了什麼活動? – kvh

回答

1

我在我的應用程序中遇到了這個問題。我重寫了onResume來重新加載我的視圖,以防在我的應用不在最前面的情況下進行更改。從鈴聲選擇器回來是啓動我的onResume。對我而言,將所有內容從onResume移動到onStart是安全的。它會在我的應用程序到達前臺或首次啓動時運行,但不會在鈴聲選擇器被解僱時運行。