【问题标题】:How to pass intent extras to multiple fragment inside Activity viewpager from PreviousActivity如何从 PreviousActivity 将 Intent Extras 传递给 Activity viewpager 中的多个片段
【发布时间】:2019-07-27 09:57:35
【问题描述】:

我有两个活动活动 A 和 B。 Activity B 包含 viewpager,它有两个片段,Fragment IFragment II。我正在寻找一种解决方案,将两个单独的 Intent Extras 即 intent extras_oneintentextra_two 从 Activity A 传递到 B 并在 intent extras 中加载第一个Fragment II 中的strong>Fragment I 和第二个intent_extras

这可能吗。

这是我在活动 B 中的查看器

        ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new Home(), "Fragment I");
        adapter.addFragment(new Grade(), "Fragment II");


        viewPager.setAdapter(adapter);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);


    }

我现在使用 case 语句在 Activity A 中传递参数。

        case 0:

                Intent math_strt = new Intent(itemView.getContext(), MainActivity.class);
                math_strt.putExtra(EXTRA_URL, "https://api.myjson.com/bins/16mecx");
                itemView.getContext().startActivity(math_strt);

                break; 

提前致谢。

【问题讨论】:

    标签: java android android-viewpager fragment


    【解决方案1】:

    是的,您可以将数据传递给片段,但不能使用意图,而是使用捆绑包,因此必须对代码进行一些修改。试试下面的代码 sn-p

        Bundle bundle1,bundle2;
    
        ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    
        Home frag1 = new Home();
        Grade frag2 = new Grade();
    
        bundle1 = new Bundle();
        bundle1.putString("key",data); //pass the data you want to pass
        bundle2 = new Bundle();
        bundle2.putString("key",data);
    
        frag1.setArguments(bundle1);//set arguments require a bundle 
        frag2.setArguments(bundle2);//set arguments require a bundle 
    
        adapter.addFragment(frag1, "Fragment I");
        adapter.addFragment(frag2, "Fragment II");
    
    
        viewPager.setAdapter(adapter);
    
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    
       //Inside the fragments create another bundle
        Bundle b = getIntent().getExtras();
        String data = b.getString("key");
    

    更多关于bundle的信息可以在Here找到

    【讨论】:

      【解决方案2】:

      这里是解决方案,你必须在 Activity A 中创建 2 个方法

      1. passIntent1()
      private void passIntent1(){
           Intent intent = new Intent(getBaseContext(), SecondActivity.class);
           intent.putExtra("INTENT_VALUE", "A");
           intent.putExtra("FRAGMENT_A", value for A);
           startActivity(intent);
      }
      
      2. passIntent2()
      private void passIntent2(){
           Intent intent = new Intent(getBaseContext(), SecondActivity.class);
           intent.putExtra("INTENT_VALUE", "B");
           intent.putExtra("FRAGMENT_B", value for B);
            startActivity(intent);
       }
      

      现在,在 B Activity 中,获取你的 Intent

          String value = getIntent().getStringExtra("INTENT_VALUE");
          if(value.equalsIgnoreCase("A")){
               String FragA =  getIntent().getStringExtra("FRAGMENT_A");
          }else if(value.equalsIgnoreCase("B")){
               String FragB =  getIntent().getStringExtra("FRAGMENT_B");
         }
      

      现在将值 FragA 传递给 Fragment A,将 FragB 传递给 Fragment B

      以下更新代码

      在 Activity 中使用下面的代码在片段中传递值。 您必须使用 Bundle 将数据传递给片段

      Home home = new Home();
      Bundle homeBundle = new Bundle();
      homeBundle.putString("KEY","VALUE");
      // Your Key must same when you get your values in Fragment Home
      home.setArguments(homeBundle);
      

      同样的,你也对 Fragment Grade 做同样的事情

      Grade grade = new Grade();
      Bundle gradeBundle = new Bundle();
      gradeBundle.putString("KEY","VALUE");
      grade.setArguments(gradeBundle);
      

      向适配器添加片段

      adapter.addFragment(home, "Fragment I");
      adapter.addFragment(grade, "Fragment II");
      

      现在在侧片段中,使用下面的代码获取值

      Bundle bundle = getArguments();
      if(bundle!=null){
          String value = bundle.getString("KEY");
      }
      

      希望,现在你能更好地理解了。

      【讨论】:

      • 谢谢@Shane,我会试试看,如何在 viewpager 片段中传递意图额外内容。我搜索但没有发现在 viewpager adatpers 中的片段中传递数据意图额外内容。上面给出了我的 viewpager 代码.
      • @ProAcademy 我已经更新了答案,看看。
      • @yes Shane 现在我完全理解了。感谢您的帮助。
      • 如何在case语句中传递两种方法?我也更新了我的问题。
      【解决方案3】:

      就我而言,我在 ActivityA 中有一个 FragmentA,它位于 RecyclerView 中。我想将一个 ID 传递给另一个 FragmentB,它位于 ActivityB 中并且位于 ViewPager 中。我所做的是将和 Intent 从 FragmentA 传递到 ActivityB

       Intent intent = new Intent(getContext(), EachRoomActivity.class);
       intent.putExtra("room_id", data.getId());
       startActivity(intent);
      

      在ActivityB的onCreate()方法里面,我得到了intentExtra

      Intent intent = getIntent();
      String room_id = intent.getStringExtra("room_id");
      

      这是我定义 Viewpager 的地方,该 Viewpager 包含我的 TabLayout 片段。 在 ViewPagerAdapter 构造函数中,我添加了对 ID 的要求

       public EachRoomViewPagerAdapter(@NonNull FragmentManager fm, String room_id) {
          super(fm);
          this.room_id = room_id;
      }
      

      所以在我为 ViewPager 切换视图时,我将 Bundle Extra 添加到 Fragment。

       @NonNull
      @Override
      public Fragment getItem(int position) {
          Fragment fragment = null;
      
          Bundle args = new Bundle();
          args.putString("room_id", room_id);
      
      
          switch (position) {
              case 1:
                  fragment = new EachRoomMySubscriptionsFragment();
                  fragment.setArguments(args);
                  break;
              case 2:
                  fragment = new EachRoomSchedulledEventsFragment();
                  fragment.setArguments(args);
                  break;
              case 3:
                  fragment = new EachRoomPreviousEventsFragment();
                  fragment.setArguments(args);
                  break;
              default:
                  fragment = new EachRoomAllEventsFragment();
                  fragment.setArguments(args);
          }
          return fragment;
      }
      

      现在,在 Fragment 的 OnCreateView() 方法中,我得到了 Bundle Extra

      Bundle bundle = getArguments();
        if(bundle!=null){
           room_id = bundle.getString("room_id");
        }
      

      就是这样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多