ViewPager片段未从活动中接收OTTO事件



我有一个带有ViewPager的活动。我的ViewPager有几个片段。我想在选择时将OTTO事件发送到片段,因此我实现ViewPager.OnPageChangeListener

     @Override
  public void onPageSelected(int position) {
     currentPosition = position;
    switch (position){
      case 0:
        EventBus.getInstance().post(new TypeEvent());
        break;
      case 1:
        EventBus.getInstance().post(new InternalEvent());
        break;
    }
  }

我的第一个片段

@Override
  public void onStart() {
    super.onStart();
  EventBus.getInstance().register(this);
  }
  @Override
  public void onStop(){
    super.onStop();
    EventBus.getInstance().unregister(this);
  }
  @Subscribe
  public void init(TypeEvent event){
    Logger.d("type event received");
    //do something.......
  }

我的活动巴士课

    public class EventBus extends Bus {
   private static EventBus eventBus;
    public static EventBus getInstance(){
        if(eventBus == null){
          eventBus = new EventBus();
        }
        return eventBus;
      }
    }

问题是我的片段没有收到事件。有什么问题?

也许当事件到来时,EventBus尚未重新登录,在片段的第一个初始化时间中,尤其是在片段中。

因此,您可以在onAttach()上打电话给EventBus.getInstance().register(this);,并在onDettach中取消注册。

问题是,即使在我的Activity onCreate(Bundle savedInstanceState)方法中设置适配器和CALING viewPager.setCurrentItem(0);之后,onPageSelected(int position)方法也没有被调用。

@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pm);
    Toolbar toolbar =(Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    viewPager = (ViewPager)findViewById(R.id.pmViewpager);
    viewPager.addOnPageChangeListener(this);
    viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager()));
    viewPager.setCurrentItem(currentPosition);
  }

我必须通过ViewPager的post()方法手动致电onPageSelected(int position)

viewPager.post(new Runnable() {
          @Override
          public void run() {
            onPageSelected(viewPager.getCurrentItem());
          }
        });

因此,我的整体onCreate(Bundle savedInstanceState)看起来像

@Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pm);
        Toolbar toolbar =(Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        viewPager = (ViewPager)findViewById(R.id.pmViewpager);
        viewPager.addOnPageChangeListener(this);
        viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager()));
        viewPager.setCurrentItem(currentPosition);
viewPager.post(new Runnable() {
              @Override
              public void run() {
                onPageSelected(viewPager.getCurrentItem());
              }
            });
      }

所有其他页面(片段)都在接收事件,因为在滚动远离第一页时将调用onpageSelected()。这只是没有收到活动的第一页。

最新更新