GithubHelp home page GithubHelp logo

navigator's Introduction

#navigator

Hex.pm Platform

Navigator

  • Easy to navigate between fragments from Activity and Fragment
  • Annotation create a easy and clearly way to navigate from other classes

Usage

Extends NavigatorFragmentActivity or NavigatorAppCompatActivity and NavigatorFragment

In Activity

getNavigator().openFragment(CharacterFragment.newInstance(ch), R.id.content, true,
                            LayoutType.REPLACE, animEnter, animExit, animPopEnter, animPopExit);

In Fragment

Open a fragment like the way activity open (same as above but from a fragment)

getRootNavigator().openFragment(fragment, R.id.content, true, LayoutType.ADD,
                            animEnter, animExit, animPopEnter, animPopExit);

Open a nested fragment

getOwnNavigator().openFragment(fragment, R.id.sub_content, true, LayoutType.ADD,
                            animEnter, animExit, animPopEnter, animPopExit);

In Other

Mark annotation @HasNavigator to a variable that contains Navigator object

@HasNavigator
ActivityViewModel viewModel;

Navigator object (in ActivityViewModel) can be one of @RootNavigator, @ParentNavigator, @OwnNavigator

@RootNavigator
Navigator rootNavigator;

And same as above, open a fragment

rootNavigator.openFragment(fragment, R.id.content, true, LayoutType.ADD,
                            animEnter, animExit, animPopEnter, animPopExit);

Sample

Dive deep with the sample

Build integration

Gradle:

buildscript {
  dependencies {
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  }
}

apply plugin: 'com.neenbedankt.android-apt'

dependencies {
  compile 'io.fruitful.navigator:navigator:0.5.4'
  apt 'io.fruitful.navigator:navigator-processor:0.5.4'
}

Advanced

Dispatcher

This dispatches an Activity or Fragment has navigators like our build-in NavigatorFragmentActivity or NavigatorAppCompatActivity and NavigatorFragment

Activity

public class OurActivity extends AnotherActivity implements NavigatorActivityInterface {

    private NavigatorActivityDispatcher<OurActivity> dispatcher = new NavigatorActivityDispatcher<>();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        dispatcher.onCreate(this);
    }

    @Override
    public boolean isStateSaved() {
        return dispatcher.isStateSaved();
    }

    @Override
    public Navigator getNavigator() {
        return dispatcher.getNavigator();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        dispatcher.onDestroy();
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        dispatcher.onBackPressed();
    }
}

Fragment

public class OurFragment extends AnotherFragment implements NavigatorFragmentInterface {

    private NavigatorFragmentDispatcher<OurFragment> dispatcher = new NavigatorFragmentDispatcher<>();

    /**
     * @return true if Fragment need interact with back command e.g: hide the popup layout,
     * hide search layout,... and more
     */
    public boolean handleBackIfNeeded() {
        return false;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        dispatcher.onActivityCreated(this);
    }

    @Override
    public Navigator getRootNavigator() {
        return dispatcher.getRootNavigator();
    }

    @Override
    public Navigator getParentNavigator() {
        return dispatcher.getParentNavigator();
    }

    @Override
    public Navigator getOwnNavigator() {
        return dispatcher.getOwnNavigator();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        dispatcher.onDestroy();
    }
}

navigator's People

Contributors

hieuxit avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.