2016-01-21 2 views
0

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

public abstract class ParentActivity extends AppCompatActivity{ 
    public Class<AppCompatActivity> actRoot; 

    void btnCancel(View v){ 
     Intent i = new Intent(this, actRoot); 
     i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(i); 
     finish(); 
    } 
} 

я затем, чтобы определить класс ребенка следующим образом

public void ChildActivity extends ParentActivity{ 
    @Overide 
    public void onCreate(Bundle savedInstance){ 
     actRoot = MainActivity.class; 
    } 
} 

корневой закон может быть любой ребенок или внук AppCompatActivity.

Как я могу определить ссылку на класс, которая будет использоваться динамически как родственник AppCompatActivity в этом контексте?

+1

Почему вы должны иметь ссылки на класс из все ваши подклассы? – TheSunny

ответ

1

Ваш подход не может быть целесообразным, но если вы хотите попробовать его, вы бы использовать вместо этого:

public Class<? extends AppCompatActivity> actRoot; 

, а затем позже:

actRoot = MainActivity.class; 
+0

Не могли бы вы указать конкретный или список конкретных причин, почему подход не рекомендуется, чтобы я мог реорганизовать вопрос? Ваш код действительно работает. Если исходный вопрос верен, у вас есть ответ. – earnshae

+0

Это зависит от цели 'actRoot' и ее трудно сказать в вашем примере. Я сказал, что это не рекомендуется, потому что в вашем примере вы запускаете действие с помощью 'actRoot', когда нажата кнопка отмены. В этом случае типичной задачей было бы закончить текущую деятельность и позволить предыдущему действию в заднем стеке, если он вернулся, как если бы пользователь нажал кнопку «Назад». –

+0

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

0

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

В любом случае я отвечу: вы можете использовать delegation pattern, что связанная статья в Википедии будет объяснять лучше, чем я мог.