Android通过EventBus进行对activity到fragment跳转的控制

Android原生api对Activity跳转到fragment中没有特定的方法,自己在网上也找到很多关于两者跳转的方法,但都感觉不是太清晰,无统一性,现在我们就用EventBus进行跳转控制

为了实现需求,我特意做了个稍微复杂点的例子,大致是这样:MainActivity里加载了三个Fragment(Fragment01,Fragment02,Fragment03),在Fragment01里面又使用了tablayout+viewpage,即Fragment01里面又加载了四个Fragment。 然后新建一个Activity,通过这个Activity跳转到Fragment01里面的第三个Fragment。好了,基本需求就这些,下面看代码

首先导入在studio里导入3.0的EventBus

compile 'org.greenrobot:eventbus:3.0.0'

创建要跳转的Activity

public class DemoActivity extends AppCompatActivity {
private Button but;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_demo);
    but= (Button) findViewById(R.id.but);
    but.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            EventBus.getDefault().post(3);
            finish();
        }
    });
}
@Override
protected void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}
}

在点击事件里加入EventBus.getDefault().post(new Demo(3));,即是你要跳转的哪个fragment,这里指要跳到第三个fragment。另外最好加上finish(),跳转过去后把当前Activity销毁掉。

然后在哪里接受数据,就在哪里注册EventBus,这里是在Fragment01里注册:

public class Fragment01 extends BaseFragment {

private TabLayout mTabLayout;
private ViewPager mViewPager;
private CourseMainAdapter courseMainAdapter;
List fragments = new ArrayList();
String[] tabTitle = new String[]{"一级", "二级", "造价", "安全"};

@Override
protected View initView() {
    View view = View.inflate(mActivity, R.layout.fragment_course, null);
    mTabLayout = (TabLayout) view.findViewById(R.id.tab_course_main);
    mViewPager = (ViewPager) view.findViewById(R.id.vp_course_main);
    return view;
}

@Override
protected void initData() {
    super.initData();
    EventBus.getDefault().register(this);

    fragments.add(new FirstEngineerFragment());
    fragments.add(new SecondEngineerFragment());
    fragments.add(new CostEngineerFragment());
    fragments.add(new SafeEngineerFragment()); 
    courseMainAdapter = new CourseMainAdapter(getChildFragmentManager(), fragments);
    mViewPager.setAdapter(courseMainAdapter);

    mTabLayout.addTab(mTabLayout.newTab().setText(tabTitle[0]));
    mTabLayout.addTab(mTabLayout.newTab().setText(tabTitle[1]));
    mTabLayout.addTab(mTabLayout.newTab().setText(tabTitle[2]));
    mTabLayout.addTab(mTabLayout.newTab().setText(tabTitle[3]));       
    mTabLayout.setupWithViewPager(mViewPager);
    mTabLayout.getTabAt(0).setText(tabTitle[0]);
    mTabLayout.getTabAt(1).setText(tabTitle[1]);
    mTabLayout.getTabAt(2).setText(tabTitle[2]);
    mTabLayout.getTabAt(3).setText(tabTitle[3]);       
}

@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(int a){
    mViewPager.setCurrentItem(a);
    Log.d("TAG","过来的数据: "+a);

}

@Override
public void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}
}

注册完后别忘了在onDestroy()方法里进行取消注册,通过onEvent来接受DemoActivity里EventBus传来的数据,通过 mViewPager.setCurrentItem(a);方法来展示你要跳转的哪个Fragment。这样就完成了,相比较一般方法,使用EventBus可以跳过MainActivity直接到你想看到的Fragment。

你可能感兴趣的:(Android通过EventBus进行对activity到fragment跳转的控制)