为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 Intent extras 传递给 PreviousActivity 中的 Activity

如何将 Intent extras 传递给 PreviousActivity 中的 Activity

陪伴而非守候 2023-04-26 16:48:39
我有两个 Activity Activity A 和 B。Activity B 包含 viewpager,它有两个片段,Fragment I和Fragment II。我正在寻找一种解决方案,将两个单独的意图附加项即意图 extras_one和intenttextra_two从 Activity A 传递到 B,并在片段 I中加载第一个意图附加项,在片段 II中加载第二个意图附加项。这可能吗。这是我在 Activity B 中的 viewpager        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; 提前致谢。
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

是的,您可以将数据传递给片段但不使用意图而是使用捆绑包,因此必须稍微修改代码。试试下面的代码片段


    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");



查看完整回答
反对 回复 2023-04-26
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

这是解决方案,您必须在 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 活动中,获取您的 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 传递给片段 A,将 FragB 传递给片段 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");

现在在 Fragment 中,使用下面的代码获取值


Bundle bundle = getArguments();

if(bundle!=null){

    String value = bundle.getString("KEY");

}

希望,现在您可以更好地理解。


查看完整回答
反对 回复 2023-04-26
?
慕后森

TA贡献1802条经验 获得超5个赞

就我而言,我在 ActivityA 中有一个 fragmentA,它位于 RecyclerView 中。我想将一个 ID 传递给位于 ActivityB 和 ViewPager 内的另一个 fragmentB。我所做的是将 FragmentA 和 Intent 传递给 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");

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


 public EachRoomViewPagerAdapter(@NonNull FragmentManager fm, String room_id) {

    super(fm);

    this.room_id = room_id;

}

因此,在我为 ViewPager 切换视图时,我将 Bundle Extra 添加到片段中。


 @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");

  }

就是这样。


查看完整回答
反对 回复 2023-04-26
  • 3 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信