[英]Android: call a function only on child activity from parent activity
我的ParentActivity.java就是这样
public class ParentActivity extends Activity{
public void childOnlyMethod(){
Log.d(TAG,"child only method triggered in parent activity");
}
public void startChildActivtityButton(){
startActivity(new Intent(this, ChildActivity.class));
}
public void childOnlyMethodButton(){
childOnlyMethod();
}
}
我的ChildActivity.java就是这样
public class ChildActivity extends ParentActivity{
@Override
public void childOnlyMethod(){
Log.d(TAG,"child only method triggered in child activity");
}
}
问题是当我在父活动和子活动中同时按下childOnlyMethodButton,childOnlyMethod()时 ,我希望仅在子活动上才能对其进行调用吗?
@Override注释不执行任何操作,仅用于告诉编译器和IDE此方法将覆盖其超类。 非静态方法与对象而非类相关联。 覆盖意味着完全替换其超类中的方法。 因此,如果您在ChildActivity上调用childOnlyMethod,则只会调用子版本。
我猜您实际上是在单击父活动实例。 我真的不明白为什么要在父引用上调用子方法。 如果您可以发布真实的代码,我可以给您更准确的答案。
但是,您可以尝试以下代码。 本示例将仅在ChildActivity实例上调用子版本childOnlyMethod。 但是,如果您单击ParentActivity上的按钮,它将仍然调用父级的childOnlyMethod。
public class ParentActivity extends Activity implements View.OnClickListener {
private static final String TAG = "ParentActivity";
private Button mStartChileButton;
private Button mButton;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mStartChileButton = (Button) findViewById(R.id.startChileButton);
mButton = (Button) findViewById(R.id.button);
mStartChileButton.setOnClickListener(this);
mButton.setOnClickListener(this);
}
public void onClick(View v) {
switch(v.getId()) {
case R.id.R.id.startChileButton:
startActivity(new Intent(this, ChildActivity.class));
break;
case R.id.R.id.button:
default:
childOnlyMethod();
break;
}
}
public void childOnlyMethod() {
Log.d(TAG, "Called from ParentActivity");
}
}
public class ChildActivity extends ParentActivity {
private static final String TAG = "ChildActivity";
@Override
public void childOnlyMethod() {
Log.d(TAG, "Called from ChildActivity");
}
}
如果要扩展父类,则将父类中的所有方法稍微传递给子类,如果您不希望实现父类中的方法,请首先从删除@Override批注开始方法上面的子类。 然后在下面使用此代码片段,它所做的就是将父类中的Method设置为私有或受保护,以便无法在子类中对其进行访问。
public class ParentActivity extends Activity {
private void childOnlyMethod(){
Log.d(TAG,"child only method triggered in parent activity");
}
//OR
protected void childOnlyMethod(){
Log.d(TAG,"child only method triggered in parent activity");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.