2015-07-13 62 views
1

我已经动态添加了某个视图(例如编辑文本,广播和复选框)。如何为所有视图添加通用侦听器,以便我可以访问它中的值(当它发生更改时)?如何在课堂上制作一个共同的听众

+0

什么一种倾听者? –

+0

@NicolasTyler更改侦听器,以便可以访问更改值 – Killer

+2

那么每个视图类型都有不同的侦听器,因此您必须为它们分配不同的侦听器。 –

回答

3

创建一个实现了所有的不同意见的听众需要自定义的抽象监听器类。

例如,

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); 

} 

然后在您的类中创建这个customListener的对象,并添加所有的意见

0

如果你想给点击事件监听器,只需在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(); 
      } 
     } 
    }; 
1

从你淘汰你的问题,我会认为你还没有工作的方式这很多,你很可能不需要创建自定义控件或自定义侦听器。

你说你在哪里动态添加控件,所以它看起来是这样的:

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(); 
    } 
}); 
+0

我也这么做了。我认为他们可能是一种新方法。 – Killer