,因此前面导入的头文件只需有BUTTON即可 */ 8 public class Hello_to_worldActivity extends Activity implements Button.OnClickListener...android.app.Activity; 2 import android.os.Bundle; 3 import android.view.View; 4 import android.view.View.OnClickListener...import android.widget.TextView; 7 8 public class Hello_to_worldActivity extends Activity implements OnClickListener...hello_world = (TextView) findViewById(R.id.textView1); 18 btn_say_hello.setOnClickListener(new Button.OnClickListener...btn_listener为监听方法的接口 17 } // 因此设置监听的参数只需传本类的对象即可 18 } 19 20 class btn_listener implements Button.OnClickListener
image.png 目录 第一章:android hook介绍 第二章:hook之替换View.OnClickListener 使用Hook修改View.OnClickListener 事件\ 首先...public void setOnClickListener(@Nullable OnClickListener l) { if (!...实战 执行分为三步: 第一步:获取 ListenerInfo 对象 第二步:获取原始的 OnClickListener事件方法 第三步:偷梁换柱,用 Hook代理类 替换原始的 OnClickListener...Hook代理类 替换原始的 OnClickListener View.OnClickListener hookedOnClickListener = new HookedClickListenerProxy...{ private View.OnClickListener origin; public HookedClickListenerProxy(View.OnClickListener
The method setPositiveButton(int, DialogInterface.OnClickListener) in the type AlertDialog.Builder is...not applicable for the arguments (String, new View.OnClickListener(){}) Here is your solution, you...It should not be .setNegativeButton("Don't Remind", new OnClickListener() It should be .setNegativeButton...("Don't Remind", new DialogInterface.OnClickListener() 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/150707
onClickListener) { onClickListener.onClick() } // 使用闭包创建接口对象 OnClickListener listener = { println...执行结果 : OnClickListener2 OnClickListener2 OnClickListener2 三、完整代码示例 ---- 完整代码示例 : // I....onClickListener) { onClickListener.onClick() } // 使用闭包创建接口对象 OnClickListener listener = { println...(OnClickListener2 onClickListener) { onClickListener.onClick() } // 使用闭包创建接口对象 OnClickListener2...() setOnClickListener2(listener2) 执行结果 : OnClickListener OnClickListener OnClickListener2 OnClickListener2
1.先建一个代理类实现View.OnClickListener,用来做点击后的后续处理。...{ private View.OnClickListener mOriginalListener; //直接在构造函数中传进来原来的OnClickListener public OnClickListenerProxy...(View.OnClickListener originalListener) { mOriginalListener = originalListener; } @Override...originOnClickListener = (View.OnClickListener) mOnClickListener.get(listenerInfo); // 用自定义的 OnClickListener...替换原始的 OnClickListener View.OnClickListener hookedOnClickListener = new OnClickListenerProxy(originOnClickListener
Android 给自己的类加个事件 1、定义一个接口 public abstract interface ISpriteAction { public interface OnClickListener... { void onClick(Sprite v); } } 2、给你的类定义事件 private ISpriteAction.OnClickListener onClickListener... = null; public void setOnClickListener(ISpriteAction.OnClickListener listener){ this.onClickListener... = listener; } 触发事件 if(onClickListener !...= null) onClickListener.onClick(this); 3、设置事件处理代码 代码title.setOnClickListener(new ISpriteAction.OnClickListener
接口 , interface OnClickListener { void onClick() } 将 OnClickListener 接口对象 作为函数参数 , 传递到函数中 , void...setOnClickListener (OnClickListener onClickListener) { onClickListener.onClick() } 然后调用上述函数 , 传递一个...OnClickListener 的匿名内部类 , setOnClickListener(new OnClickListener() { @Override void onClick()...onClickListener) { onClickListener.onClick() } setOnClickListener{ println "OnClick2" } 执行结果...(OnClickListener onClickListener) { onClickListener.onClick() } // 正常参数调用 setOnClickListener(new
*/ public static void hookListener(Activity activity, OnClickListener onClickListener) {...getView(View view, OnClickListener onClickListener) { //递归遍历,判断当前view是不是ViewGroup,如果是继续遍历,直到不是为止...OnClickListener * * @param view * @param onClickListener */ private static void viewHook(View view...onclickListener; public OnClickListenerProxy(View.OnClickListener object, ClickCollectionManager.OnClickListener...onclickListener) { this.object = object; this.onclickListener = onclickListener
下面通过 Hook View 的 OnClickListener 来说明 Hook 的使用方法。...首先进入 View 的 setOnClickListener 方法,我们看到 OnClickListener 对象被保存在了一个叫做 ListenerInfo 的内部类里,其中 mListenerInfo...ListeneInfo 里面保存了 View 的各种监听事件,比如 OnClickListener、OnLongClickListener、OnKeyListener 等等。...OnClickListener 替换原始的 OnClickListener View.OnClickListener hookedOnClickListener = new HookedOnClickListener...private View.OnClickListener origin; HookedOnClickListener(View.OnClickListener origin) {
openOnClickListener = new OnClickListener() { @Override public void onClick(View v) { open(); } }; /...** * 关闭手电筒 */ private OnClickListener closeOnClickListener = new OnClickListener() { @Override public...void onClick(View v) { close(); } }; /** * 开启闪烁 */ private OnClickListener openFlickerOnClickListener...= new OnClickListener() { @Override public void onClick(View v) { isShanshuo = true; openFlicker.setEnabled...closeFlickerOnClickListener = new OnClickListener() { @Override public void onClick(View v) { isShanshuo
. */ public class CountdownButton extends Button implements View.OnClickListener { private long lenght...onClickListener;//按钮点击事件 /** * 更新显示的文本 */ private Handler handler = new Handler() { @Override public...= null) { onClickListener.onClick(v); } initTimer(); this.setText(time / 1000 + afterText); this.setEnabled...*/ @Override public void setOnClickListener(OnClickListener onclickListener) { if (onclickListener instanceof...CountdownButton) { super.setOnClickListener(onclickListener); } else { this.onClickListener = onclickListener
public class ChronometerActivity extends Activity implements OnClickListener { private Chronometer...mStartListener = new OnClickListener() { public void onClick(View v) { mChronometer.start(...); } }; View.OnClickListener mStopListener = new OnClickListener() { public void onClick(...View v) { mChronometer.stop(); } }; View.OnClickListener mResetListener = new OnClickListener...("Formatted time (%s)"); } }; View.OnClickListener mClearFormatListener = new OnClickListener
四、Hook View的点击事件 先看看View 点击事件的源码 public void setOnClickListener(@Nullable OnClickListener l) {...如果我们可以通过反射将这个ListenerInfo里面的mOnClickListener 替换成我们自定义的OnClickListener是不是就可以实现我们目的了。接下来我们试试!...originOnClickListener = (View.OnClickListener) mOnClickListener.get(listenerInfo); // 用自定义的...hookedOnClickListener 替换原始的 mOnClickListener View.OnClickListener hookedOnClickListener...{ private View.OnClickListener origin; HookOnClickListener(View.OnClickListener
{ override fun onClick(view: View) { // 点击事件 } } 对应的就是 Java 中的 匿名内部类 ; new View.OnClickListener(...*/ public interface OnClickListener { /** * 当视图被单击时调用。...(object : OnClickListener{ override fun onClick(v: View?)...表达式 : // 添加按钮点击事件 , 设置一个 OnClickListener#onClick 函数类型的 Lambda 表达式 // 作为点击事件...函数类型的 Lambda 表达式 , 其 Lambda 表达式类型为 (View) -> Unit 传入 View 类型实例对象 , 返回值为 void , 对应的就是 OnClickListener
() { @Override public void onClick(View v) { Log.i(TAG, "Button OnClickListener onClick..."); } }); 2、熟悉底层源码 使用 Hook 的前提是 , 必须熟悉要 Hook 功能的底层源码 , 如 : Hook 按钮点击事件 , 必须熟悉 View 组件的 OnClickListener...getListenerInfo() 获取的是 ListenerInfo 类型的对象 , 其中就封装了 OnClickListener mOnClickListener 成员 , 点击监听器就是设置在这里...监听器 获取 ListenerInfo 中的 public OnClickListener mOnClickListener 成员 , 并重新设置新的成员 , 注入业务逻辑 ; ① 先根据全类名获取...mOnClickListener = null; try { mOnClickListener = (View.OnClickListener) field.get(mListenerInfo
全部替换为子类IClickListener 不可逆-不能很方便的还原为OnClickListener,因为不是同个回调 如果是第三方控件则无法处理重复点击 只能写成内部类方式-由于单继承特性,我们只能内部类回调...代理 public class ClickProxy implements View.OnClickListener { private View.OnClickListener origin;...private long lastclick = 0; private long timems = 1000; public ClickProxy(View.OnClickListener origin...{ private View.OnClickListener origin; private long lastclick = 0; private long timems = 1000; /.../ms private IAgain mIAgain; public ClickProxy(View.OnClickListener origin, long timems, IAgain again
我们可以写一个Proxy动态代理OnClickListener。.... */ public class ClickProxy implements View.OnClickListener{ private static boolean isStartLoadingClick...=false; private static boolean isStartSingleClick=false; private View.OnClickListener onClickListener...onClickListener, Context context){ this.onClickListener=onClickListener; this.mC=context...否则使用方式和普通的OnclickListener使用没有差别。
android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener...// 2、 Alt Ctrl F 形成类全局Field mBtClick.setOnClickListener(new View.OnClickListener...R.id.btnSample2); //5、找出button 2 的 button id fdv mBtClick2.setOnClickListener(new Button_2_OnClickListener...that was clicked. */ @Override public void onClick(View v) { //方法三 } class Button_2_OnClickListener...implements View.OnClickListener //6、设置一个 click 方法 命名后继承自 view // onclicklistener
OnClickListener和其他Listener方法一样,都是View类的接口,重载实现后就能使用,其接口定义如下: public interface OnClickListener {...android:text="Button6" /> 2、Main.java public class Main extends Activity implements OnClickListener...()对象, 即class Main 对象 * 用这种方式的话,public void onClick 方法必须写在该Main类中, 且Main类开头实现implements OnClickListener...clickListener = new OnClickListener() { @Override public void onClick(View v) { String strTmp...strTmp = "点击Button05"; tv.setText(strTmp); } }; } 3、callOut 类 public class callOut implements OnClickListener
onClickListener; private Context context; private int colorId; public ButtonSpan(Context...context, View.OnClickListener onClickListener) { this(context, onClickListener, R.color.color_theme...); } public ButtonSpan(Context context, View.OnClickListener onClickListener, int colorId) {...this.onClickListener = onClickListener; this.context = context; this.colorId...= null) { onClickListener.onClick(widget); } } } 设置: // content为全部的字符串,keyWord
领取专属 10元无门槛券
手把手带您无忧上云