2015-08-03 5 views
0

Мой ParentActivity.java подобно этомуAndroid: вызвать функцию только на детской активности от родительской активности

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() как в родительском, так и в дочернем действии вызывается Я хочу, чтобы он был вызван только для ребенка могу ли я достичь этого?

+0

Вы попытались удалить '@ Override'? – Phantomazi

+0

Метод в подклассе (лучшая терминология, чем «ребенок») должен быть вызван и только это. Возможно, вы назначили два обработчика событий. Можете ли вы показать код, в который вы прикрепляете обработчик событий к кнопке? – AndroidGuy

ответ

0

Если вы распространяете родительский класс, все методы родительского класса передаются нескольким дочернему классу, если вы не хотите, чтобы метод в родительском классе был реализован, сначала начните с удаления этого @ Переопределить аннотацию в дочернем классе над методом. Затем используйте этот снимок ниже, все, что он делает, - это сделать метод в родительском классе либо закрытым, либо защищенным, чтобы он не мог быть доступен в дочернем классе.

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"); 
    } 
} 
0

@Override аннотацию ничего не делает, он используется только сказать, компилятор и IDE, что этот метод переопределяет его суперкласс. Нестатические методы связаны с объектами, а не с классами. Переопределяющие средства полностью заменяют метод в суперклассе. Поэтому, если вы вызываете childOnlyMethod в ChildActivity, вызывается только дочерняя версия.

Я предполагаю, что вы на самом деле нажали на экземпляр родительской активности. Я действительно не понимаю, почему вы хотите вызвать дочерний метод в родительской ссылке. Если вы можете опубликовать реальный код, я могу дать вам более точный ответ.

Однако, вы можете попробовать следующий код. В этом примере вызывается только дочерняя версия childOnlyMethod в экземпляре ChildActivity. Но он все равно вызовет родительский childOnlyMethod, если вы нажмете кнопку на ParentActivity.

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"); 
    } 
} 
Смежные вопросы