Android偏好
问题描述:
我正在我的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,但我只需要一个按钮,而不是复选框。有人可以帮忙吗?
答
把你的代码
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference);
方法。 preference
这里是被点击的偏好。
答
如果它只是一个简单的按钮,那么没有优先级可以更改,所以在这种情况下不会调用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);