【问题标题】:Android button onclick overrideAndroid 按钮 onclick 覆盖
【发布时间】:2011-12-20 13:09:14
【问题描述】:

我想创建一个CustomButton,它有一个预定义的onClick。 事实上,我的对象会做同样的工作,而不是

CustomButton mButton = getViewById(..);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
  show_something()
}

有没有办法将Listener 嵌入到继承自 Button 的 CustomButton 对象中? 我想要的是在我的布局 XML 文件中创建一个CustomButton,而不必在我的活动中提及这个按钮,这将给出:

main.xml:

<LinearLayout xmlns:"...">
     <com.mypackage.view.CustomButton
         (attributes)/>
</LinearLayout>

CustomButton.java:

class CustomButton extends Button implements... {

@Override
OnClick (or something like that, that's the core of my question, what to put here)
}

myActivity.java

public class myActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    }
}

非常感谢。

【问题讨论】:

    标签: android button overriding


    【解决方案1】:

    你真的很亲密:

    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class CustomButton extends Button implements OnClickListener{
    
        public CustomButton(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init();
        }
    
        public CustomButton(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }
    
        public CustomButton(Context context) {
            super(context);
            init();
        }
    
        private void init(){
            setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            // Do something
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      在你的按钮类中实现:

      @Override
      public void onClick(View v) {
          showSomething();
      }
      

      或者,如果您想要更精细的控制:

      @Override
      public boolean onTouchEvent(MotionEvent event) {
          showSomething();
      }
      

      您可以通过检查 event.getAction() 在方法中实现您的点击逻辑,也可以将其发送到 GestureDetector 以确定何时执行了点击。

      【讨论】:

        【解决方案3】:

        使用该代码:

        class CustomButton extends Button implements View.OnClickListener{
             CustomButton(Context c, AttributeSet attrs) {
                 ...
                 setOnClickListener(this);
                 ...
             }
        
            @override
            public void onClick(View v){
                //add your code here
            }
        }
        

        【讨论】:

          【解决方案4】:

          当你使用 Kotlin 时:

          class TemporyActionButton constructor(
            context: Context,
            attrs: AttributeSet
          ) : RelativeLayout(context, attrs), View.OnClickListener {
          
            private val button: MaterialButton
            private var event: CustomOnClickListener? = null
          
            init {
              inflate(context, attrs)
          
              button = findViewById(R.id.button_action)
              button.setOnClickListener(this)
          
              context.theme.obtainStyledAttributes(
                attrs, R.styleable.TemporyActionButton, 0, 0
              ).use {
                // styling
              }
            }
          
            override fun onClick(v: View) {
              event?.customOnClick(v)
            }
          
            fun setCustomClickListener(event: CustomOnClickListener) {
              this.event = event
            }
          
            private fun inflate(context: Context, attrs: AttributeSet) {
              LayoutInflater.from(context).inflate(R.layout.layout_button_action, this, true)
              layoutParams = LinearLayout.LayoutParams(context, attrs)
            }
          }
          
          fun interface CustomOnClickListener {
            fun customOnClick(view: View)
          }
          
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多