簡體   English   中英

如何在廣播接收器中啟動片段

[英]How can I launch fragment in broadcast receiver

例如,如何使用廣播接收器啟動/提供片段:如果需要啟動/提供活動,則可以使用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();
    }
}

但我不知道片段

您必須lu悔意圖putexterasendactivity 然后,您可以從活動中啟動片段。

片段Activity的一部分。 如果沒有活動 ,則無法啟動單獨的Fragment 您可以使用Fragment啟動一個Activity

一種方法是在Activity中創建BroadcastReceiver內部類以啟動Fragment

這樣行嗎? 將其放在您的廣播接收器中:

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導航至任何片段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM