在Click侦听器上实现可重用的自定义以获取自定义视图

时间:2017-04-12 19:48:23

标签: java android design-patterns

我点击它时有一个自定义视图(按钮)我想先做一些动画。

mycustomButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {   
           //FIRST
           startAnimation()

           //THEN
           //... call what you want ...
        }
});

此代码有效但我想为许多应用程序使用相同的自定义视图,我不想为每个应用程序复制相同的代码,因此我创建了一个模块(包含):

  • MyCustomView(按钮)
  • CustomAnimation
  • ...

所以我想将我的模块用于多个应用程序。当我点击我的自定义视图时,每次我都做同样的事情:

  • 首先,开始动画(所有应用程序的动画相同)。
  • 然后,打电话想要我想要

我点击它时如何在点击监听器上实现自定义我之前做了一个动画,我想保持点击参数的默认值(查看视图)

类似的东西:

mycustomview.setCustomOnClickListener(new MyCustomView.OnClickListener() {
    @Override
    public void onClick(View view) {   
        //... call what you want ...
    }
});

示例:

应用1:

mycustomview.setCustomOnClickListener(new MyCustomView.OnClickListener() {
    @Override
    public void onClick(View view) {   
        callCalenderActivity();
    }
});

App 2:

mycustomview.setCustomOnClickListener(new MyCustomView.OnClickListener() {
    @Override
    public void onClick(View view) {  
        compute(); 
        callOpenGLActivity();
    }
});

1 个答案:

答案 0 :(得分:1)

覆盖setOnClickListener,以便将传入的侦听器保存在变量中。在构造函数中,编写一个自定义的OnClickListener来执行您想要的操作,然后调用已保存的listener.onClick,如果它不为null。然后使用super.setOnClickListener设置自定义单击侦听器。

   OnClickListener childListener;

   public void setOnClickListener(OnClickListener listener) {
       childListener = listener;
   }

   Constructor() {
       super.setOnClickListener(new OnClickListener() {
           public void onClick(View view) {
               //Do what you want
               if(childListener != null) {
                   childListener.onClick(view);
               }
           }
        });
    }