1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/rubintry-GoRouter

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

GoRouter — самый лёгкий фреймворк для маршрутизации в Android

The most lightweight Framework about router in android.

中文文档

Javadoc

GitHub license

Последняя версия

module GoRouter-api GoRouter-compiler GoRouter-annotation
version Version Version Version

Особенности

  1. Поддержка нескольких модулей.
  2. Полная поддержка активности.
  3. Поддержка получения экземпляра фрагмента.
  4. Поддержка InstantRun.
  5. Поддержка MultiDex.
  6. Поддержка AndroidX.
  7. Поддержка Kotlin.

Как реализовать?

config.gradle

    dependencies{
    //annotation
    implementation 'cn.rubintry:gorouter-annotation:1.0.3'
    //core api
    implementation 'cn.rubintry:gorouter-api:1.0.33'
    //Java
    annotationProcessor  'cn.rubintry:gorouter-compiler:1.0.5'
    //Kotlin
    kapt  'cn.rubintry:gorouter-compiler:1.0.5'
}

Как построить проект?

gradle.properties

    //If you need run sub module as Application, you should make moduleIsApplication true
    moduleIsApplication = false

mainModule.gradle

    apply plugin: 'com.android.application'
    apply from: '../config.gradle'

    dependencies {

    if(!moduleIsApplication.toBoolean().booleanValue()){
        implementation project(path: ':anothermodule')
    }
}

anotherModule.gradle

    if(moduleIsApplication.toBoolean().booleanValue()){
        apply plugin: 'com.android.application'
    }else{
        apply plugin: 'com.android.library'
    }
    apply from: '../config.gradle'

    android {

    defaultConfig {
        if(moduleIsApplication.toBoolean().booleanValue()){
            applicationId "Your sub module's package name"
        }
        ...
    }

    sourceSets{
        main {
            if(moduleIsApplication.toBoolean().booleanValue()){
                //If you run this module as application , you can use the default AndroidManifest.xml
                manifest.srcFile 'src/main/AndroidManifest.xml'
            }else{
                //If you run this module as library , you should create a new AndroidManifest liked follows
                manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
            }
        }
    }
}

AndroidManifest.xml при запуске модуля как библиотеки

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your package name">

    <application>
        <activity android:name="your activity in another module">
        </activity>
    </application>

</manifest>

Как использовать?

Простое использование


Фрагмент ```java

//Get a fragment instance Fragment instance = GoRouter.getInstance().build("fragmentRouteKey").go()

Активность
```java
   //Navigation to an Activity immediately
   GoRouter.getInstance().build("routeKey2").go()


   //With data
   Bundle data = new Bundle()
   data.putInt(key , value);
   GoRouter.getInstance().build("routeKey2" , data).go()

Целевая активность

/**
* @author logcat
*/
@Route(url = "routeKey2")
public class LoginActivity extends AppCompatActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
``` ```
setContentView(R.layout.activity_login);

value = getIntent().getInt(key)

With sharedElements

Activity

Layout

activity1

<TextView
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="activity1"
    app:layout_constraintTopToTopOf="parent"
    app:layout_constraintStartToStartOf="parent"
    app:layout_constraintEndToEndOf="parent"
    android:transitionName="sharedActivity"
    android:textSize="50sp" />

activity2

<TextView
    android:id="@+id/tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="activity1"
    app:layout_constraintTopToTopOf="parent"
    app:layout_constraintStartToStartOf="parent"
    app:layout_constraintEndToEndOf="parent"
    android:transitionName="sharedActivity"
    android:textSize="50sp" />
//Activity1
//navigation to another activity with animation.

tv = findViewById(R:id.tv);

GoRouter.getInstance().build("activity1 's routeKey")
.go(this, ActivityOptionsCompat.makeSceneTransitionAnimation(this, tv, tv.getTransitionName()).toBundle())

Advanced usage

Decoupled by exposure service

/**
 * Expose this service in common lib.
 */
interface SimpleService implements IProvider {

    void simple(Context context);
}

/**
 * Implements this service in module B and deal with it.
 */
@Route(url = "Simple/SimpleService")
public class SimpleServiceImpl implements SimpleService {
    @Override
    public void init(Context context) {
        //Here you can do something to initialize.
    }

    public void simple(Context context) {
        //do something
    }
}

/**
 * An activity in module A
 */
public class SimpleActivity extends AppCompatActivity {

    @ovserride
    public void oncreate(Bundle savedInstanceState) {

        SimpleService service = GoRouter.getInstance()
                .build("Simple/SimpleService").go(SimpleService.class);

        if (service != null) {
            service.simple(this.getApplicationContext());
        }
    }
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/rubintry-GoRouter.git
git@api.gitlife.ru:oschina-mirror/rubintry-GoRouter.git
oschina-mirror
rubintry-GoRouter
rubintry-GoRouter
master