簡體   English   中英

如何將 Intent Extras 從 PreviousActivity 傳遞給 Activity viewpager 內的多個片段

[英]How to pass intent extras to multiple fragment inside Activity viewpager from PreviousActivity

我有兩個活動Activity A 和 B 活動 B 包含 viewpager,它有兩個片段,片段 I片段 II 我“米尋找溶液通過兩個單獨的意圖,即額外意圖extras_oneintentextra_two從活動A到B和負載在片段予意圖額外設備和在片段II。第二intent_extras。

這可能嗎。

這是我在活動 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 語句在活動 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; 

提前致謝。

是的,您可以將數據傳遞給片段,但不能使用意圖,而是使用捆綁包,因此必須稍微修改代碼。 試試下面的代碼片段

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

可以在此處找到有關捆綁的更多信息

這是解決方案,您必須在活動 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);
 }

現在,Inside B Activity,得到你的意圖

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

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

就我而言,我在 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 添加到 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");
  }

就是這樣。

暫無
暫無

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

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