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

Android 如何在广播接收器中启动片段,android,android-fragments,broadcastreceiver,Android,Android Fragments,Broadcastreceiver,我如何使用广播接收器启动/停止广播 例如: 如果我需要启动/luanch活动,我可以使用intent: public void onReceive(final Context context, Intent intent) { this.context = context; this.intent = intent; try { Bundle bundle = intent.getExtras(); int messageID = b

我如何使用广播接收器启动/停止广播 例如: 如果我需要启动/luanch活动,我可以使用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();
    }
}

但是我不知道片段是怎么回事,片段是活动的一部分。没有活动您无法启动单独的片段。您可以使用片段启动活动


一种方法是在活动中创建BroadcastReceiver内部类来启动片段片段活动的一部分。没有活动您无法启动单独的片段。您可以使用片段启动活动


一种方法是在活动中创建BroadcastReceiver内部类来启动Fragment您必须luanchintent和putexterasendactivity
然后您可以从activity启动fragment。

您必须luanchintent和putexterasendactivity
然后您可以从“活动”中启动片段。

这是否有效?把这个放进你的广播接收器:

activityIntent = new Intent(context, MainActivity.class);
activityIntent.putExtra("fragment", "fragment2");
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(activityIntent);
在用于设置片段寻呼机适配器的代码下面:

Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    if (bundle.getString("fragment") != null) {
        /*Log.w(getClass().toString(), bundle.getString("fragment"));*/
        viewPager.setCurrentItem(2);
    }
}
此代码通常如下所示:

        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) {

            }

        });

只需确保它位于您设置适配器的下方,而不仅仅是您的viewpager,否则您将无法通过viewpager导航到任何片段。

这是否有效?把这个放进你的广播接收器:

activityIntent = new Intent(context, MainActivity.class);
activityIntent.putExtra("fragment", "fragment2");
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(activityIntent);
在用于设置片段寻呼机适配器的代码下面:

Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    if (bundle.getString("fragment") != null) {
        /*Log.w(getClass().toString(), bundle.getString("fragment"));*/
        viewPager.setCurrentItem(2);
    }
}
此代码通常如下所示:

        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) {

            }

        });
只需确保它位于您设置适配器的下方,而不仅仅是您的viewpager,否则您将无法通过viewpager导航到任何片段