我已经阅读了很多关于如何使用onClickListener创建和处理Button点击的线程。但是,我找不到任何解决这个问题的东西。
我有一个类myActivity,我想创建第二个类myExtendedActivity,它通过添加一些额外的功能来扩展myActivity。 myActivity类包含很多代码,出于可维护性的原因,我不想复制。 myExtendedActivity的行为与myActivity完全相同,但有一些额外的功能。
特别是在myActivity的onCreate方法中,我有以下代码将onClickListener添加到my_button。扩展活动应该只是调用myExtraMethod。
myButton = (Button)findViewById(R.id.my_button);
myButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
[...] //a lot of code here
myExtraMethod();
}
});
请注意,myExtraMethod只是广播一个Intent,它不受监听器中代码的任何其他部分的影响。
我想要做的是扩展myExtendedActivity中的OnClickListener,使其首先执行为myActivity编写的代码,而不是myExtendedActivity中定义的myExtraMethod。
我不想修改myActivity,如果myExtendedActivity包含在项目中,我应该完全不知道。
非常感谢
答案 0 :(得分:1)
完全没有修改myActivity几乎是不可能的。
您可以在MyActivity
(Template method pattern的某些变体)中使用类似的内容:
onCreate() {
myButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
myMethod();
}
});
}
protected void myMethod() {
[...] //a lot of code here
}
然后在MyExtendedActivty
:
@Override
protected void myMethod() {
super.myMethod();
myExtraMethod();
}
答案 1 :(得分:0)
如果我理解你的问题,解决方案可能是这样的:
在按钮布局中,您可以从xml:
定义onClickListener<Button
android:id="@+id/myButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="handleButtonClick"
/>
然后,在MyActivity中实现方法:
public void handleClick(View view) {
}
在MyExtendedActivity中,您可以覆盖它:
public class MyExtendedActivity extends MyActivity {
@Override
public void handleClick(View view) {
super.handleClick(view);
//your code goes here
}
}
答案 2 :(得分:0)
不修改myActivity
,你不能因为你实例化一个匿名类,并且子类无法“挂钩”到那个匿名类。
如果你可以修改myActivity
,那么你可以从myButton.setOnClickListener(...)
创建一个静态类的匿名类,并在你的子类中扩展调用super.onClick(v)
的监听器类,然后是你的功能期望。
然后添加一个方法来获取正确的侦听器
myButton.setOnClickListener(createMyButtonsListener())
然后您可以在提供扩展版本的子类中覆盖。
或者,添加一个可以在子类中重写的方法(即myExtraMethod()
)。在你的匿名类中调用。