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

来源:互联网 发布:mac os x ei 编辑:程序博客网 时间:2024/05/29 16:48

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;@Overrideprotected 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();        }    });}@Overrideprotected 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<Fragment> fragments = new ArrayList<Fragment>();String[] tabTitle = new String[]{"一级", "二级", "造价", "安全"};@Overrideprotected 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;}@Overrideprotected 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);}@Overridepublic void onDestroy() {    super.onDestroy();    EventBus.getDefault().unregister(this);}}

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

1 0
原创粉丝点击