어제 Square에서 OTTO를 사용하기 시작 했으므로 지금까지는 좋은 출발을 보았습니다.다른 활동의 OTTO 및 단편
Otto는 FragmentActivity에서 이미 호스팅 된 Fragment를 가지고 있고 FragmentActivity가 호스팅하는 Fragment간에 의사 소통을해야 할 때 멋지게 사용할 수 있습니다.
이미 호스팅되면 #onResume() 메도는 호출되는과 조각은 Eventbus에 자신을 등록 할 수 있습니다:
@Override
public void onResume()
{
super.onResume();
BusProvider.getInstance().register(this);
}
내 문제 :
추가에 포함 된 조각 Eventbus를 통해 이벤트를 수신해야하는 활동은 다음과 같습니다.
public AnotherFragmentHostedInSomeActivity extends Fragment
{
.....
@Subscribe
public void onSomethingHappend(final Event event)
{
final SomeObject deliveredObject = event.getSomeObject();
public class SomeFragmentSendingDataToAnotherFragment extends Fragment
{
...
private void sendData()
{
final Intent intent = new Intent(applicationContext, SomeActivity.class);
applicationContext.startActivity(intent);
BusProvider.getInstance().post(new Event(someObject));
이미 볼 수 있듯이,이 코드는 사기입니다 : 당신이 에게이이 코드와 같은 조각을 호스팅하는 다른 활동을 호출 할 때 여전히 복잡하고 있습니다. 활동을 시작한 다음 라이프 사이클 때문에 해당 활동이 수행하지 않는 부분으로 데이터를 보냅니다. 그래서 활동이 생성되고 Fragements도 생성됩니다. onResume Methode가 호출되면서 Fragement가 @Subscribe를 사용하여 자신을 등록 할 수 있습니다. 그러나이 모든 것은 이후에 이 발생하고 이벤트는 이미 EventBus를 통해 게시됩니다. 그래서 Interrest의 단편은 결코 EventBus에 의해 호출되지 않습니다.
누구나 현명한 방법으로이 작업을 수행 할 수 있습니다.
몇 가지 추가 정보가 있습니다. 어제 나는 OTTO와 함께 멋진 플레이 어라운드를 경험했습니다. 필자의 경우, APP가 태블릿이 아닌 스마트 폰에서 실행될 때 필자의 경우 다른 활동으로 데이터를 보내야 할 때만 문제가 발생합니다. Intent와 Parcelable을 통해 모든 데이터를 보내기 전에. Otto는 Parcleable Objects를 작성할 필요성을 줄이므로이 방법을 사용하고 싶습니다.
답해 주셔서 감사합니다.
Eric을 지워 줘서 고맙습니다. 나는 버스가 할 수있는 것의 differnt 인상을 가지고 있었다. 라이프 사이클은 단순히 게임을 플레이하지 않습니다. 따라서 이벤트를 시작하기 위해 내 조각이 태블릿 또는 전화 '모드'인지 확인해야합니다. – Kitesurfer