2011-04-05 72 views
2

我正在我的Android應用程序中進行備份和恢復選項。然後你打開首選項,我想要一個按鈕來備份和一個按鈕來恢復。 我使按鈕在我的XML/preference.xml文件是這樣的:Android偏好

<PreferenceCategory android:title="Backup"> 
    <Preference 
     android:key="backup" 
     android:title="Backup" 
     android:summary="Make a backup of shows" 
    /> 
    <Preference 
     android:key="restore" 
     android:title="Restore" 
     android:summary="Restore shows from backup" 
    /> 
</PreferenceCategory> 

我我的偏好I類實現OnSharedPreferenceChangeListener,並添加getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);onResume()getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);OnPause()

第i工具onSharedPreferenceChanged:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     // Let's do something when my counter preference value changes 
     if (key.equals("backup")) { 
      Toast.makeText(this, "Backup button pressed", Toast.LENGTH_SHORT).show(); 
     } else if (key.equals("restore")) { 
      Toast.makeText(this, "Restore button pressed", Toast.LENGTH_SHORT).show(); 
     } 
    } 

但是沒有顯示吐司然後我按下按鈕中的一個。我工作正常,即CheckBoxPreference,但我只需要一個按鈕,而不是複選框。有人可以幫忙嗎?

回答

2

把你的代碼

public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 
             Preference preference); 

方法。 preference這裏是被點擊的偏好。

4

如果它只是一個簡單的按鈕,那麼沒有優先級可以更改,所以在這種情況下不會調用onSharedPreferenceChanged

使用一個onclick監聽器來代替:

OnPreferenceClickListener btnListener = new OnPreferenceClickListener() { 
    @Override 
    public boolean onPreferenceClick(Preference preference) { 
     final String key = preference.getKey(); 

     if (key.equals("backup")) { 
      // show toast 
      return true; // we handled the click 
     } 
     return false; // we didn't handle the click 
    } 
}; 

Preference prefBtn = findPreference("backup"); 
prefBtn.setOnPreferenceClickListener(btnListener);