[英]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.