2011-04-05 109 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);