如何从带有变量的布局调用方法
How to call a method from layout with variables
我可能以错误的方式解决这个问题 - 应用我从其他 API 了解的知识 - 所以,如果是这样,也许你可以指出我不同的方向。事实上,我似乎找不到任何例子来说明我在做什么。我正在尝试从 xml 布局中调用一个方法。我想从各种复选框调用相同的方法,基本上是单击任何复选框,我想将 isChecked 状态存储在 SharedPreferences 文件中。这是我的 xml 和 java:
<CheckBox
android:layout_width="194dp"
android:layout_height="wrap_content"
android:text="@string/Chri"
android:id="@+id/chkbxChristmas"
android:checked="false"
android:onClick="savePreferencesData(@string/Chri,@+id/chkbxChristmas)"/>
public void savePreferencesData(String preference,int id) {
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = prefs.edit();
CheckBox cb1 = (CheckBox) findViewById(id);
editor.putBoolean(preference, cb1.isChecked());
// Commit the edits!
editor.commit();
};
如您所见,我正在尝试传递复选框 ID 和 @string/Chri 字符串值(我将此值用作 SharedPreferences 文件中的标记)以便该方法知道要更新哪个首选项.
甚至可以传递变量吗?有没有更好的方法来识别哪个复选框正在调用该方法?
非常感谢您的帮助!
只是一个快速更新:出于某种原因我无法让 Lister 运行...这是我的代码:
public void saveHanuPref(View view) {
final CheckBox checkBox = ( CheckBox ) findViewById( R.id.chkbxHanukkah );
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(getString(R.string.Hanu), checkBox.isChecked());
editor.commit();
}
}
});
}
从 activity xml(使用 onClick)调用这个简单的方法确实有效:
public void saveChriPref(View view) {
CheckBox checkBox = ( CheckBox ) findViewById( R.id.chkbxChristmas );
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(getString(R.string.Chri), checkBox.isChecked());
editor.commit();
};
再次感谢您的帮助。
您在按钮的 onClick()
方法中声明的方法只能采用一种输入类型 - 它是持有该按钮的视图。无法指定其他数据。
说的是,onCLick中的方法应该只有方法名,没有参数等
android:onClick = "savePreferencesData()"
假设您正在使用 Activity
class,这就是创建方法的方式。
public void savePreferencesData(View v) {
// 做你想做的
}
您在 xml 文件中声明的方法应该只出现在同一个 Activity class 中。也就是说,其他 XML 文件中的其他按钮不能重复使用此方法。
is there a better way to identify which checkbox is calling the
method?
试试下面的代码示例:
YOUR_CHECKBOX_NAME.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(YOUR_CHECKBOX_NAME.isChecked()) {
System.out.println("Checked");
} else {
System.out.println("Un-Checked");
}
}
});
正确的方法是设置 OnCheckedChangeListener
CheckBox checkBox = ( CheckBox ) findViewById( R.id.chkbxChristmas );
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
// perform logic
}
}
});
我可能以错误的方式解决这个问题 - 应用我从其他 API 了解的知识 - 所以,如果是这样,也许你可以指出我不同的方向。事实上,我似乎找不到任何例子来说明我在做什么。我正在尝试从 xml 布局中调用一个方法。我想从各种复选框调用相同的方法,基本上是单击任何复选框,我想将 isChecked 状态存储在 SharedPreferences 文件中。这是我的 xml 和 java:
<CheckBox
android:layout_width="194dp"
android:layout_height="wrap_content"
android:text="@string/Chri"
android:id="@+id/chkbxChristmas"
android:checked="false"
android:onClick="savePreferencesData(@string/Chri,@+id/chkbxChristmas)"/>
public void savePreferencesData(String preference,int id) {
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = prefs.edit();
CheckBox cb1 = (CheckBox) findViewById(id);
editor.putBoolean(preference, cb1.isChecked());
// Commit the edits!
editor.commit();
};
如您所见,我正在尝试传递复选框 ID 和 @string/Chri 字符串值(我将此值用作 SharedPreferences 文件中的标记)以便该方法知道要更新哪个首选项.
甚至可以传递变量吗?有没有更好的方法来识别哪个复选框正在调用该方法?
非常感谢您的帮助!
只是一个快速更新:出于某种原因我无法让 Lister 运行...这是我的代码:
public void saveHanuPref(View view) {
final CheckBox checkBox = ( CheckBox ) findViewById( R.id.chkbxHanukkah );
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(getString(R.string.Hanu), checkBox.isChecked());
editor.commit();
}
}
});
}
从 activity xml(使用 onClick)调用这个简单的方法确实有效:
public void saveChriPref(View view) {
CheckBox checkBox = ( CheckBox ) findViewById( R.id.chkbxChristmas );
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(getString(R.string.Chri), checkBox.isChecked());
editor.commit();
};
再次感谢您的帮助。
您在按钮的
onClick()
方法中声明的方法只能采用一种输入类型 - 它是持有该按钮的视图。无法指定其他数据。说的是,onCLick中的方法应该只有方法名,没有参数等
android:onClick = "savePreferencesData()"
假设您正在使用
Activity
class,这就是创建方法的方式。public void savePreferencesData(View v) { // 做你想做的 }
您在 xml 文件中声明的方法应该只出现在同一个 Activity class 中。也就是说,其他 XML 文件中的其他按钮不能重复使用此方法。
is there a better way to identify which checkbox is calling the method?
试试下面的代码示例:
YOUR_CHECKBOX_NAME.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(YOUR_CHECKBOX_NAME.isChecked()) {
System.out.println("Checked");
} else {
System.out.println("Un-Checked");
}
}
});
正确的方法是设置 OnCheckedChangeListener
CheckBox checkBox = ( CheckBox ) findViewById( R.id.chkbxChristmas );
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
// perform logic
}
}
});