如何在 class 中创建一个普通的监听器
How to make a common listener in a class
我动态添加了某个视图(例如编辑文本、单选框和复选框)。如何为所有视图添加一个公共侦听器,以便我可以访问其中的值(当它更改时)?
如果要给点击事件监听器,只需要在oncreate方法中定义下面的代码即可。
btnSubmit.setOnClickListener(clicklistener);
您的自定义侦听器将是这样的,
private OnClickListener clicklistener = new OnClickListener() {
@Override
public void onClick(View v) {
try {
switch (v.getId()) {
case R.id.btnSubmit:
// Do your code....
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
创建自定义抽象侦听器class,它通过您的不同视图实现所有需要的侦听器。
例如,
public abstract class CustomListener implements OnCickListener, CheckedChangedListener....{
public void onClick(View view){
onEvent(view);
}
public void onCheckedChanged(View view){
onEvent(view);
}
public abstract void onEvent(View view);
}
然后在您的 class 中创建此 customListener 的对象并为所有视图添加
从你分阶段提出问题的方式来看,我假设你没有用过这么多,你很可能不需要创建自定义控件或自定义侦听器。
你说你在哪里动态添加控件,所以它看起来像这样:
EditText editText = new EditText(this);
//editText setup...
RadioButton radioButton = new RadioButton(this)
//radioButton setup...
CheckBox checkBox = new CheckBox(this);
//checkBox setup...
然后您可以像这样添加侦听器(可选择调用更改后的方法):
EditText editText = new EditText(this);
//editText setup...
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
changed();
}
@Override
public void afterTextChanged(Editable s) {
}
});
RadioButton radioButton = new RadioButton(this);
//radioButton setup...
radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
changed();
}
});
CheckBox checkBox = new CheckBox(this);
//checkBox setup...
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
changed();
}
});
我动态添加了某个视图(例如编辑文本、单选框和复选框)。如何为所有视图添加一个公共侦听器,以便我可以访问其中的值(当它更改时)?
如果要给点击事件监听器,只需要在oncreate方法中定义下面的代码即可。
btnSubmit.setOnClickListener(clicklistener);
您的自定义侦听器将是这样的,
private OnClickListener clicklistener = new OnClickListener() {
@Override
public void onClick(View v) {
try {
switch (v.getId()) {
case R.id.btnSubmit:
// Do your code....
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
创建自定义抽象侦听器class,它通过您的不同视图实现所有需要的侦听器。
例如,
public abstract class CustomListener implements OnCickListener, CheckedChangedListener....{
public void onClick(View view){
onEvent(view);
}
public void onCheckedChanged(View view){
onEvent(view);
}
public abstract void onEvent(View view);
}
然后在您的 class 中创建此 customListener 的对象并为所有视图添加
从你分阶段提出问题的方式来看,我假设你没有用过这么多,你很可能不需要创建自定义控件或自定义侦听器。
你说你在哪里动态添加控件,所以它看起来像这样:
EditText editText = new EditText(this);
//editText setup...
RadioButton radioButton = new RadioButton(this)
//radioButton setup...
CheckBox checkBox = new CheckBox(this);
//checkBox setup...
然后您可以像这样添加侦听器(可选择调用更改后的方法):
EditText editText = new EditText(this);
//editText setup...
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
changed();
}
@Override
public void afterTextChanged(Editable s) {
}
});
RadioButton radioButton = new RadioButton(this);
//radioButton setup...
radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
changed();
}
});
CheckBox checkBox = new CheckBox(this);
//checkBox setup...
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
changed();
}
});