(1)首先,在模板类(因为可能在不同activity里面使用,并且想要在不同activity中有不同的逻辑实现)中定义一个接口
public class My_call extends LinearLayout{
//省略了addView操作
Button left_button;
Button right_button;
My_click_listener my_click_listener;
//***************************************就是这个
public static interface My_click_listener{
public void left_click();
public void right_click();
}
public void setMy_click_listener(My_click_listener my_click_listener){
this.my_click_listener=my_click_listener;
}
public My_call(Context context) {
super(context);
//假如我这个控件有两个button
left_button=new Button(context);
right_button=new Button(context);
//为了让这个类在不同地方被调用 点击事件可以自由,使用这种模板
left_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
my_click_listener.left_click();
}
});
right_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
my_click_listener.right_click();
}
});
}
}
(2)使用模板的地方,实现接口,并传回来
这里传回实现接口的匿名类,还有一种方式就是调用模板的地方实现接口,然后通过this进行回调
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
My_call my_call=new My_call(this);
my_call.setMy_click_listener(new My_call.My_click_listener() {
@Override
public void left_click() {
//点击left_button的逻辑
}
@Override
public void right_click() {
//点击right_button的逻辑
}
});
}