Anroid otto bus example 유용한 라이브러리

2016. 11. 2. 11:12Mobile/Android



반응형

android otto bus example 유용한 라이브러리


Observer 패턴이나 Listener 패턴을 사용해서 이벤트 전달을 많이들 합니다.


 Activity, Fragment 등에서 이벤트를 받고 쓸데없이 static을 쓰고 여러 생상자를 만들어서 Context 등을 사용하는 번거로움이 있습니다. 


이러한경우

https://github.com/square/otto  라이브러리를 쓰시면 됩니다.

 

예제를 다운로드 받아서 살펴보시면 쉽게 코드를 사용할 수 있습니다.

 

Gradle 추가

compile 'com.squareup:otto:1.3.8'

sample 파일을 열어보시면 싱글톤으로 클래스를 만들어줍니다.

/** * Maintains a singleton instance for obtaining the bus. Ideally this would be replaced with a more efficient means * such as through injection directly into interested classes. */

public final class BusProvider {  private static final Bus BUS = new Bus();  

public static Bus getInstance() {    return BUS;  }  

private BusProvider() {    

// No instances. 

  }

}


이벤트가 일어날곳에 등록

@Override protected void onResume() {
  super.onResume();

  // Register ourselves so that we can provide the initial value.
  BusProvider.getInstance().register(this);
}

@Override protected void onPause() {
  super.onPause();

  // Always unregister when an object no longer should be on the bus.
  BusProvider.getInstance().unregister(this);
}

 

//이벤트를 날린다

  findViewById(R.id.btn).setOnClickListener(new OnClickListener() {
    @Override public void onClick(View v) {
            // @Produce 에 대한 설명 https://medium.com/@LIP/otto-186e676cf1b

BusProvider.getInstance().post(produceLocationEvent());

          //  BusProvider.getInstance().post(new LocationChangedEvent(lastLatitude, lastLongitude));
    }
  });
}


@Produce

public LocationChangedEvent produceLocationEvent() {

// Provide an initial value for location based on the last known position. 

return new LocationChangedEvent(lastLatitude, lastLongitude);

}

 

 

LocationChangedEvent.java

public class LocationChangedEvent {
  public final float lat;
  public final float lon;

  public LocationChangedEvent(float lat, float lon) {
    this.lat = lat;
    this.lon = lon;
  }

  @Override public String toString() {
    return new StringBuilder("(") //
        .append(lat) //
        .append(", ") //
        .append(lon) //
        .append(")") //
        .toString();
  }
}


//해당 Fragment 에서 @Subscribe 통해 받는다. 메소드이름은 원하는걸로 

 @Subscribe

public void onLocationChanged(LocationChangedEvent event) { 

//액션이 일어난다 !
}





끝~

반응형

'Mobile > Android' 카테고리의 다른 글

Android getMap() 오류  (0) 2016.11.23
Android Studio SVN 사용법  (0) 2016.11.20
Android Sudio XML Preview 깨짐 현상 해결  (0) 2016.10.28
[Android & iOS] icon size  (1) 2016.07.27
[안드로이드]Android CardView Example  (0) 2016.07.19