Java 如何从onClickListeners调用成员函数
考虑一下Java 如何从onClickListeners调用成员函数,java,android,Java,Android,考虑一下活动中的下面一段代码(顺便说一句,它工作得很好): class ParentActivity extends Activity { ... @Override public void btnOK_onClick(final View view) { // do stuff } } class ChildActivity extends ParentActivity { ... public void s
活动中的下面一段代码(顺便说一句,它工作得很好):
class ParentActivity extends Activity {
...
@Override
public void btnOK_onClick(final View view) {
// do stuff
}
}
class ChildActivity extends ParentActivity {
...
public void superClick(View view) {
super.btnOK_onClick(view);
}
@Override
public void btnOK_onClick(final View view) {
final BarcodePickActivity me = this;
if (confirmation_needed == true) {
new AlertDialog.Builder(this)
.setTitle(R.string.are_you_sure_)
.setMessage(R.string.are_you_sure_you_want_to_continue)
.setNegativeButton(R.string.no, null)
.setPositiveButton(R.string.yes, new OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
me.superClick(view);
}
}).create().show();
} else {
super.btnOK_onClick(view);
}
}
}
在所使用的布局中,有一个按钮
,带有onClick
设置:
<Button
android:id="@+id/btnOK"
android:onClick="btnOK_onClick"
android:text="@string/ok" />
正如你所看到的,为了让这一切顺利进行,我必须克服很多困难:
定义一个final
变量,使该变量在AlertDialog
的OnClickListener
中可用
定义一个额外的方法,以便能够调用super.btnOk\u onClick
正如我所说,它很好用,但看起来并不漂亮。有没有更好的方法呢?使用classname。这是内部类的。因此,如果您的类是MySuperClass
,那么您可以引用MySuperClass。这
来自一个实例内部类
没有理由需要定义superClick
,因为您总是可以调用super.btnOK_onClick(视图)代码>
总而言之,您应该能够执行类似于MySuperClass.super.btnOK_onClick()的操作。
请发布完整的代码,因为这没有意义。@AdamArold我添加了一些代码,希望能让它更清楚。this.super
不编译,但ChildActivity.super.btnOnClick()
似乎有效您是否尝试从内部类调用super.btnOK\u onClick
?那可能行得通。如果没有,您仍然需要定义超级单击
。无论哪种方式,你都可以摆脱me
@MikeM。我不这么认为,因为我想在重写的方法中调用“base”方法。不使用super调用将导致堆栈溢出。@MikeM。Bart是对的,他正试图从重写方法调用重写方法。方法是使用super
。我道歉。你说得对。我忘了你已经超越了btnOK\u onClick()
。但是,正如我在回答中所说的,如果所做的工作不依赖于View参数,请将其放在它自己的方法中。