2015-12-21 3 views
3

У меня есть проект приложения Android, который также имеет несколько проектов библиотеки Android. Каждый проект библиотеки имеет свои собственные действия и ресурсы. Я реализовал NavigationDrawer и хотел бы иметь его во всех действиях, поэтому я создал базовый проект (проект библиотеки Android), в котором есть ящик (следуя инструкциям в этом ответе: Same Navigation Drawer in different Activities). Тогда идея состоит в том, что каждый субпроект (проекты библиотеки Android) будет простираться от базы, но в этот момент я сталкиваюсь с проблемой обращения к кругу.Как избежать круговой ссылки между проектами?

У меня есть такая же структура, как на этой картинке:

flow_diagram

Там нет никаких проблем, чтобы каждый вид деятельности в подпроектах продлить из библиотеки Base, но проблема заключается в том, что базе библиотеки также должно знать о деятельности (отсюда и циклическая ссылка), так что я могу справиться с щелчками в NavigationDrawer, что-то подобное:

mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     switch (position) { 
      case 0: 
       Intent intent = new Intent(this, SubProjectOneActivityOne.class); 
       startActivity(intent); 
       finish(); 
       break; 
      case 1: 
       Intent intent1 = new Intent(this, SubProjectOneActivityTwo.class); 
       startActivity(intent1); 
       break; 
      case 2: 
       Intent intent2 = new Intent(this, SubProjectTwoActivityOne.class); 
       startActivity(intent2); 
       break; 
      default: 
       break; 
    } 
}}); 

так что на данный момент я ударяя в тупик с Тхи подход. Возможно ли перегрузить событие click в подпроектах? Есть ли у кого-нибудь другие предложения?

+0

Я обработал это, предоставив объект «router». Базовый проект может показать, что и каждый из других модулей может зарегистрировать маршрут. Эти маршруты могут выполнять действие, которое может или не может быть запущено. – daentech

+0

@daentech Вы можете поделиться дополнительной информацией и, возможно, с кодом? – Apostrofix

+0

Вот пример кода. Надеюсь, он скомпилируется, но я удалил ненужный код. Вы могли бы назвать свои маршруты как константы в своем базовом проекте и, возможно, ссылаться на них в других проектах? https://gist.github.com/daentech/f372f3a6529d08979f1c Это также может обрабатывать маршруты с использованием '/ route/' и передает данные в намерении как' getData() ' – daentech

ответ

2

Я решил эту проблему (и пару других), используя механизм маршрутизации.

Мое решение в этом суть:
https://gist.github.com/daentech/f372f3a6529d08979f1c

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

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

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

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

+0

Я не уверен, что могу понять, как его использовать. Я добавил «ApplicationRouter» и интерфейс к базовой библиотеке, но в «SyncStateContract.Constants.ACTIVITY_PATH» есть ошибка. И тогда я не уверен, как использовать его в других проектах. Не могли бы вы подробнее рассказать? – Apostrofix

+0

Являются ли каждый из ваших других модулей библиотеки проектов? В Android Studio? – daentech

+0

Одно из основных приложений, а все остальные - это модули библиотеки, в том числе базовая библиотека. – Apostrofix

Смежные вопросы