Расширить Activity и ActivityGroup - PullRequest
       21

Расширить Activity и ActivityGroup

0 голосов
/ 23 февраля 2012

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

//custom Activity
public abstract class BaseActivity extends Activity
//custom ActivityGroup
public abstract class BaseActivityGroup extends ActivityGroup

//implemented activities in my app
public class PickUser extends BaseActivity
//and
public class Home extends BaseActivityGroup

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

Итак, как я могу сделать свои расширения таким образом, чтобы я писал собственный код только в BaseActivity, а мой BaseActivityGroup расширялся?ActivityGroup - что задумано из BaseActivity класса?

Если я наблюдаю, как android делает это, значит, ActivityGroup в android расширяет Activity class.И я также хочу написать свой собственный класс ActivityGroup (известный как BaseActivityGroup ), который фактически расширяет BaseActivity (который является расширенным Activity ).

Есть идеи / предложения?

Ответы [ 4 ]

0 голосов
/ 23 февраля 2012

вы можете поместить свой логин в отдельный файл в соответствии с методом.Теперь вызовите один и тот же метод из BaseActivity и BaseActivityGroup, если вам нужен экземпляр активности в файле.передать контекст через конструктор

0 голосов
/ 23 февраля 2012

Просто расширьте все до BaseActivity, включая BaseGroupActivity, так как все является дочерним элементом Activity в android

0 голосов
/ 23 февраля 2012

Прежде всего ActivityGroups плохие и не должны использоваться.Они устарели, и предпочтительно использовать одно действие с несколькими фрагментами.

Если вам необходимо использовать группу действий, вам, вероятно, лучше всего реализовать шаблон делегата.

Создайте делегат, который обрабатывает все распространенные методы, такие как onCreate, onResume, и используйте его в базах.В этом примере я сохраняю ссылку на действие в делегате.Эта круговая ссылка не может быть преттами.Альтернативой является передача действия методам в делегате.

public class ActivityDelegate() {
    private Activity mActivity;

    public ActivityDelegate(final Activity activity) {
        mActivity = activity;
    }
    public void onCreate(final Bundle savedInstanceState) {
        // Do stuff.
    }
}


public abstract class BaseActivity extends Activity {
    private ActivityDelegate mDelegate = new ActivityDelegate(this);

    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mDelegate.onCreate(savedInstanceState);
    }
    ...
}

public abstract class BaseActivityGroup extends ActivityGroup {
    private ActivityDelegate mDelegate = new ActivityDelegate(this);

    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mDelegate.onCreate(savedInstanceState);
    }
    ...
}
0 голосов
/ 23 февраля 2012

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

public static boolean createOptionsMenu(final Menu menu,
        final MenuInflater inflater) {
    inflater.inflate(R.menu.main_menu, menu);
    return true;
}

Затем в ваших классах BaseActivity и BaseActivityGroup вы будете вызывать:

@Override
public final boolean onCreateOptionsMenu(final Menu menu) {
    return Base.createOptionsMenu(menu, getMenuInflater());
}

Надеюсь, это поможет!

...