【问题标题】:How can I open fragment of tabs when I pressed notification?按下通知时如何打开标签片段?
【发布时间】:2016-04-12 10:54:55
【问题描述】:

我正在尝试在一个标签片段中启动通知。单击通知时,我需要打开特定选项卡。我试过这样。

在通知中

     Intent intent = new Intent(context, NotificationTabs.class);
    // Send data to NotificationView Class
    intent.putExtra("Medicine", "Medicine");
    //intent.putExtra("text", "need to take medicine");
    // intent.setAction("Medicine");
    // Open NotificationView.java Activity
    PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent,
            PendingIntent.FLAG_UPDATE_CURRENT);

在主标签活动中

public class NotificationTabs extends AppCompatActivity {
TabLayout tabLayout;
ViewPager viewPager;
ViewPagerAdapter adapter;
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_notification_tabs);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
     actionBar = getSupportActionBar();
    tabLayout =(TabLayout) findViewById(R.id.tablayout);
    viewPager = (ViewPager)findViewById(R.id.viewpager);
    setupViewPager(viewPager);
    tabLayout.setupWithViewPager(viewPager);

    int position = 0;

    Intent intent = getIntent();

    String intentaction = intent.getAction();

    if (intentaction != null) {
        if (intentaction.equals("Medicine")) {
            position = 2;
        }
    }
     actionBar.setSelectedNavigationItem(position);//--- here i got error
}

private void setupViewPager(ViewPager viewPager) {
    adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new QuizFragment(),"Quiz");
    adapter.addFragment(new TipsFragment(),"Tips" );
    adapter.addFragment(new MedicineFragment(),"Medicine");

    viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {

        super(manager);
    }
    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);

    }

    @Override
    public Fragment getItem(int position) {

        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }


    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

}

请任何人都可以帮助我在我的代码中单击通知时如何打开片段?每当我按下通知时,我都需要在 android 中使用 Medicine Fragment。提前致谢。

【问题讨论】:

  • GCM+报警通知

标签: android android-fragments tabs android-notifications android-tablayout


【解决方案1】:

使用

getStringExtra(); 

喜欢这个

String name = data.getStringExtra("Medicine");

【讨论】:

  • 收到此错误:原因:java.lang.IllegalStateException:setSelectedNavigationIndex 对当前导航模式无效
  • 并且不要以横向模式打开它
  • 检查链接,有人解决了你的问题,只需复制他答案的最后 2 个代码部分
  • 不,这在我的代码中不起作用,两者都不同。那是给onpagelistener的。但我需要通知
【解决方案2】:

传递指定选项卡以打开的操作,以及待处理意图中的意图。并在您的活动检索操作(请参阅 getIntent())中传递并基于它,打开一个特定的选项卡。

Intent intent = new Intent(this, NotificationTabs.class);
intent.setAction("Medicine");
PendingIntent pending intent = PendingIntent.getService(this, 0, intent, 0);              



 public class NotificationTabs extends AppCompatActivity {
    TabLayout tabLayout;
    ViewPager viewPager;
    ViewPagerAdapter adapter;
    ActionBar actionBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_notification_tabs);
        //Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        //setSupportActionBar(toolbar);
        actionBar = getSupportActionBar();
        tabLayout =(TabLayout) findViewById(R.id.tablayout);
        viewPager = (ViewPager)findViewById(R.id.viewpager);
        setupViewPager(viewPager);
        tabLayout.setupWithViewPager(viewPager);







    }

    private void setupViewPager(ViewPager viewPager) {

        adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new QuizFragment(),"Quiz");
        adapter.addFragment(new TipsFragment(),"Tips" );
        adapter.addFragment(new MedicineFragment(),"Medicine");

        viewPager.setAdapter(adapter);
       if(getIntent().getAction().equals("Medicine") {

            actionBar.setSelectedNavigationItem(2);


        }else{
            actionBar.setSelectedNavigationItem(0);
        }

            adapter.notifyDataSetChanged();//here you have to notify      the adapter
    }
    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {

            super(manager);
        }
        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);

        }

        @Override
        public Fragment getItem(int position) {

            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }


        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

【讨论】:

  • 如何打开标签页? actionBar.setSelectedNavigationItem(position) 在这里我如何获得位置
  • 在你的 NotificationTabs onCreate 你必须写下这一行 if(getIntent().getAction().equals("OPEN_TAB_1") { // 这里你传递了片段标签 }
  • 是的,我在这里得到它,但在我的情况下 if(getIntent().getAction().equals("Medicine") { 这里我如何打开标签?}
  • 那么你必须在其中设置片段,这两行 adapter.addFragment(new MedicineFragment(),"Medicine"); viewPager.setAdapter(适配器);
  • 我有一个想法,不知道对错你可以测试一次并告诉我它是否适合你,我正在更新我以前的代码
【解决方案3】:

样本

return new Intent(MyApplication.getContext(), DepositCLIA.class).setAction("tab2deposit");

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = getIntent();
    String intentaction = intent.getAction();
    if (intentaction != null) {
        if (intentaction.equals("tab2deposit")) {
            mViewPager.setCurrentItem(1);
        }
    }
}

【讨论】:

  • 您应该在答案中添加一些叙述。仅包含代码的答案将被删除。
猜你喜欢
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
相关资源
最近更新 更多