Android как создать свою собственную деятельность и расширить ее?

Мне нужно создать базовый класс, который расширяет Activity который выполняет некоторые общие задачи в моем приложении и расширяет мои действия от него, в следующем виде:

Public BaseActivity расширяет действие {….}

Public SubActivity расширяет BaseActivity {…}

В SubActivity Мне нужно дать значения некоторым переменным и компонентам пользовательского интерфейса, определенным в BaseActivity , мне может потребоваться определить другой макет для SubActivity в соответствии с некоторым значением флага, также (в SubActivity ) Я хочу выполнить asyncTask, который определен в BaseActivity .

Это возможно? Если да, есть ли какие-либо учебники, которые могут помочь? заранее спасибо

Что именно вы пытаетесь достичь? Имеете ли два разных действия с общим ui, за исключением некоторых переменных или частей макета?

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

Например, для двух действий с различными ресурсами компоновки:

 public abstract class BaseActivity extends Activity { @Override public void onCreate(bundle) { super.onCreate(bundle); setContentView(getLayoutResourceId()); } protected abstract int getLayoutResourceId(); } public class Activity1 extends BaseActivity { @Override public void onCreate(bundle) { super.onCreate(bundle); // do extra stuff on your resources, using findViewById on your layout_for_activity1 } @Override protected int getLayoutResourceId() { return R.layout.layout_for_activity1; } } 

У вас может быть намного больше абстрактных методов, для каждого бит, который вы хотите использовать для своих подклассов.

Это, на мой взгляд, намного лучше, чем наличие конкретного подкласса для конкретного суперкласса: это может привести к многочисленным проблемам и обычно трудно отлаживать.

Да, вы можете просто иметь в виду основные правила наследования. Вы наследуете внутреннюю активность AsyncTask и свойства, определенные в BaseActivity, если вы сделаете их защищенными, а не частными. Из того, что я вижу сейчас, я думаю, что вы должны сделать BaseActivity абстрактным классом, так как будут использоваться только экземпляры subActivities.

Вы должны просто начать и попробовать, это придет и будет работать легче, чем вы думаете. Если вы наткнетесь на какие-либо проблемы, просто спросите.

Я нашел более простой способ решения @ Гийома. Установите ContentView только один раз в своей BaseActivity и не устанавливайте его в своих действиях:

 public abstract class BaseActivity extends Activity { @Override public void onCreate(bundle) { super.onCreate(bundle); setContentView(activity_main); } } public class Activity1 extends BaseActivity { @Override public void onCreate(bundle) { super.onCreate(bundle); // setContentView(activity_activity1) // Do NOT call this. } } 

У этого вопроса уже есть очень хорошие ответы.
Мой ответ для тех людей, которые ищут какой-то рабочий пример.
Вот полная работа -> CODE

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

ПРЕИМУЩЕСТВА: Это обеспечивает лучшую читаемость кода, удобство обслуживания и бла-бла. Но не после этой возможности, они не будут иметь для вас значения, если ваш мозг работает как газель.
Мы находимся после реальной власти наследования «КОНТРОЛЬ» . (Это то, что происходит и в реальной жизни. Родитель контролирует ребенка :)).

В моем примере у меня есть две операции MainActivity и OtherActivity. Обе операции имеют разную компоновку, но я хочу, чтобы оба они начинались с некоторой анимации или какого-то приветственного сообщения.

Наша первая задача – выяснить общее поведение. Здесь -> Начать операцию с анимации.
Мы нашли общую «вещь», теперь мы напишем это поведение в BaseClass ( AnimationActivity ).
MainActivity и OtherActivity наследуют AnimationActivitys.

Таким образом, код будет выглядеть так:

BaseActivity

 AnimationActivity { startAnimation() { .... } } 

Детские мероприятия

 MainActivity extends AnimationActivity{ } OtherActivity extends AnimationActivity{ } 

Этот подход к дизайну обеспечивает много контроля и гибкости (POWER OF MODIFIER).

1) CONTROL: сохранить метод анимации внутри onCreate () Когда вы решите, что действия должны быть запущены с помощью анимации. Храните свой метод внутри метода onCreate (Bundle bundle). Теперь просто изменив модификатор, вы можете контролировать дочерние действия.
Если вы сохраняете модификатор как
Final: Действия ребенка начнутся с родительской анимации.
Реферат: Детские мероприятия должны будут дать свою собственную анимацию.
Nomodifier: Ребенок может иметь свою собственную анимацию, переопределяя метод анимации, иначе ребенок будет иметь родительскую анимацию.

2) Гибкость: не держите метод анимации внутри onCreate (). Вы можете обеспечить гибкость дочерних действий, не поддерживая метод анимации внутри onCreate (пакет Bundle). Теперь действия могут иметь гибкость, чтобы иметь родительскую анимацию или собственную анимацию или вообще не включать анимацию.
Надеюсь, поможет.
Счастливое обучение.

`