简体   繁体   English

如何在广播接收器中启动片段

[英]How can I launch fragment in broadcast receiver

How can I use broadcast receiver to start/lunch fragment for example : if I need to start/luanch activity , I can use intent : 例如,如何使用广播接收器启动/提供片段:如果需要启动/提供活动,则可以使用intent

public void onReceive(final Context context, Intent intent) {

    this.context = context;
    this.intent = intent;

    try {
        Bundle bundle = intent.getExtras();

        int messageID = bundle.getInt("id");

        intent = new Intent(context, GetAlarm.class);

        intent.putExtra("id",messageID);

        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);

    } catch (Exception e) {
        Toast.makeText(context, "There was an error ", Toast.LENGTH_SHORT)
                .show();
        e.printStackTrace();
    }
}

but I don't know how about fragment 但我不知道片段

You must luanch intent and putextera and sendactivity . 您必须lu悔意图putexterasendactivity Then you can launch fragment from activity. 然后,您可以从活动中启动片段。

Fragment is a part of Activity . 片段Activity的一部分。 Without Activity you cannot launch a separate Fragment . 如果没有活动 ,则无法启动单独的Fragment You can launch an Activity with Fragment . 您可以使用Fragment启动一个Activity

One way is to create BroadcastReceiver inner class in Activity to launch Fragment . 一种方法是在Activity中创建BroadcastReceiver内部类以启动Fragment

Does this work? 这样行吗? Put this in your Broadcast Receiver: 将其放在您的广播接收器中:

activityIntent = new Intent(context, MainActivity.class);
activityIntent.putExtra("fragment", "fragment2");
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(activityIntent);

and beneath the code you use to set your fragment pager adapter : 在用于设置片段寻呼机适配器的代码下面:

Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    if (bundle.getString("fragment") != null) {
        /*Log.w(getClass().toString(), bundle.getString("fragment"));*/
        viewPager.setCurrentItem(2);
    }
}

This code is usually below something like this: 这段代码通常在以下代码中:

        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        final PagerAdapter adapter = new FragmentPagerAdapter
                (getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }

        });

Just make sure it's beneath where you set your adapter, and not just your viewpager, or else you won't be able to navigate to any fragments via the viewpager. 只需确保它位于您设置适配器的位置下方,而不仅仅是您的viewpager,否则您将无法通过viewpager导航至任何片段。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM