我是Android初学者,想在我的设置/偏好设置 - 活动中提出一个if问题。
这是我的Preferences.java:
package net.dominik.genpush;
import android.os.Bundle;
import android.preference.PreferenceActivity;
public class Preferences extends PreferenceActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
}
...和我的Prefs.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="pushCheckBox"
android:title="@string/pushnachr_headline"
android:summary="@string/pushnachr_explain"
android:defaultValue="true">
</CheckBoxPreference>
</PreferenceScreen>
现在我想制作类似
的东西public void onCheckboxPush(View b)
{
if (pushCheckBox.isChecked())
{
//CODE
}
else...
但不知道如何在复选框更改时启动方法。 另一方面,我可以使用
我的activity.xml-File中的android:onClick =“MethodeNameHere”。这在我的PreferenceActivity类中不起作用,因此没有消息。
是否有(简单)方式以类似方式执行“onClick”之类的操作?
答案 0 :(得分:2)
您可以为复选框设置侦听器。
CheckBoxPreference checkBox = (CheckBoxPreference) findPreference("pushCheckBox");
checkBox.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
//your code here
return true;
}
});
根据documentation,返回true将使用新值更新“首选项”的状态。
如果检查了checkBox,只需检查侦听器内部。
答案 1 :(得分:0)
如果您只是想让一个属性依赖另一个属性,则可以使用android:dependency
属性。那会做你想要的吗?例如,
<CheckBoxPreference
android:key="pushCheckBox"
android:title="@string/pushnachr_headline"
android:summary="@string/pushnachr_explain"
android:defaultValue="true">
<!-- This setting will be disabled if pref_one is not checked -->
<CheckBoxPreference
android:defaultValue="false"
android:key="preference_two"
android:dependency="pushCheckBox"
android:title="Pref Two" />
但是,如果你真的只想让click事件做其他事情,可以在onResume
方法中添加这样的东西。
Preference pushCheckBox = findPreference("pushCheckBox");
pushCheckBox.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
// do something here
return false;
}
});