簡體   English   中英

Android:僅在父活動中的子活動上調用函數

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM