【问题标题】:How to pass from one fragment to another如何从一个片段传递到另一个片段
【发布时间】:2016-04-27 08:23:01
【问题描述】:

在我的应用程序中,我有带有一些片段的导航抽屉。当我在抽屉中选择时,我执行以下代码:

FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container, f, tag);
ft.commit();

在 MainActivity 中。

现在在一个片段中,我想在屏幕底部放置一个 TabLayout,但我遇到了这样的麻烦:

  1. 是否可以replace 从一个片段到另一个片段?我可以把fragmentTransaction放在哪里?
  2. 如果我想调用第三个片段(例如此选项卡片段之一中的发送按钮),我可以对选项卡使用相同的功能吗?

感谢您的回答

【问题讨论】:

    标签: android android-fragments fragment fragmenttransaction


    【解决方案1】:

    你可以这样做......

    //when navigation item is selected by user
        @Override
        public void onDrawerItemSelected(View view, int position) {
            displayView(position);
        }
    
        public void displayView(int position) {
            String title = getString(R.string.app_name);
            switch (position) {
                case 0:
                    fragment = new UserProjectListFragment();                    
                    break;
                case 1:
                    fragment = new ContactUsFragment();
                    break;
                case 2:
                    fragment = new HelpFragment();
                    break;
                case 3:
                    //and so on
    
                    break;
    
                default:
                    break;
            }
            if (fragment != null) {
                FragmentManager fragmentManager = getSupportFragmentManager();
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.container_body, fragment).addToBackStack("fragBack");
                fragmentTransaction.commit();
                // set the toolbar title
                getSupportActionBar().setTitle(title);
            }
        }
    

    /对于您的问题,是否可以从一个片段替换为另一个片段?我可以把fragmentTransaction放在哪里? 是的 这样做

    Fragment videoFragment = new VideoPlayerFragment();
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
    transaction.add(R.id.video_fragment, videoFragment).commit();
    

    【讨论】:

    • 是的,我在 onDrawerItemSelected() 中制作了它。但我问另一个问题:当我调用 HelpFragment() 时,我想放置一个带有 3 个片段的选项卡布局:主页、卡片、地图。我想说如何在一个片段中管理这个标签
    • 所以我必须调用 getChildFragmentManager(),在类 HelpFragment 扩展 Fragment 中,确定吗?你可以做 transaction.replace( ).commit() 吗?
    • @ste9206..yes...我给你测试过的官方代码示例
    • @ste9206..我的快乐...快乐的编码
    • 如果我想回来,怎么打电话?
    【解决方案2】:

    你可以这样做

    String cid=id.getText().toString();
    
     Fragment fr=new friendfragment();
    
     FragmentManager fm=getFragmentManager();
    
     android.app.FragmentTransaction ft=fm.beginTransaction();
    
     Bundle args = new Bundle();
    
     args.putString("CID", cid);
    
     fr.setArguments(args);
    
     ft.replace(R.id.content_frame, fr);
    
     ft.commit(); 
    

    您可以接收数据

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        String strtext = getArguments().getString("CID");    
        return inflater.inflate(R.layout.fragment, container, false);
    }
    

    【讨论】:

      【解决方案3】:

      如果您想嵌套Fragments,您需要将最低 API 级别设置为 17,从哪个版本支持它。见here

      【讨论】:

        【解决方案4】:

        你可以像这样创建xml:

        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        
        <android.support.design.widget.TabLayout
            android:id="@+id/pagerTabStrip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            app:tabIndicatorColor="?android:attr/textColorPrimary"
            app:tabIndicatorHeight="5dp"
            app:tabSelectedTextColor="?android:attr/textColorPrimary"
            app:tabTextColor="?android:attr/textColorPrimary" />
        
        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        

        然后在片段中创建寻呼机适配器:

        PagerAdapter adapter = new PagerAdapter(getChildFragmentManager());
            mPagerTabStrip.setTabsFromPagerAdapter(adapter);
            mPagerTabStrip.setOnTabSelectedListener(new  TabLayout.OnTabSelectedListener() {
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
                }
        
                @Override
                public void onTabUnselected(TabLayout.Tab tab) {
        
                }
        
                @Override
                public void onTabReselected(TabLayout.Tab tab) {
        
                }
            });
            mViewPager.setAdapter(adapter);
            mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mPagerTabStrip));
        
        private class PagerAdapter extends FragmentPagerAdapter {
            private Map<Integer, String> mFragmentTags;
            private FragmentManager mFragmentManager;
        
            public PagerAdapter(FragmentManager fm) {
                super(fm);
                this.mFragmentManager = fm;
                mFragmentTags = new HashMap<>();
            }
        
            @Override
            public Fragment getItem(int position) {
                Fragment fragment = new MyBookFragment();
                Bundle args = new Bundle();
                args.putInt("MyBookFragment", position);
                args.putInt("mSelectedPosition", mSelectedPosition);
                fragment.setArguments(args);
                return fragment;
            }
        
            @Override
            public int getCount() {
                return 2;
            }
        
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                Object objects = super.instantiateItem(container, position);
                if (objects instanceof Fragment) {
                    Fragment fragment = (Fragment) objects;
                    String tag = fragment.getTag();
                    mFragmentTags.put(position, tag);
                }
                return objects;
            }
        
            public Fragment getFragment(int position) {
                String tag = mFragmentTags.get(position);
                if (TextUtils.isEmpty(tag)) {
                    return null;
                }
                return mFragmentManager.findFragmentByTag(tag);
            }
        
            @Override
            public CharSequence getPageTitle(int position) {
                switch (position) {
                    case 0:
                        return getString(R.string.now);
                    default:
                        return getString(R.string.my_book_reservation);
                }
            }
        }
        

        【讨论】:

          【解决方案5】:

          你可以试试这个导航列表..我认为对你有帮助

          navigation_list 是 Navigatindrawer 上的列表视图

              navigation_list.setOnItemClickListener(new OnItemClickListener() {
          
                  @Override
                  public void onItemClick(AdapterView<?> parent, View view,
                          int position, long id) {
          
          
          
                              switch (position) {
                              case 0:
          
                                  getSupportFragmentManager()
                                          .beginTransaction()
                                          .replace(R.id.frame_container,
                                                  new NewsDateFragment()).commit();
                                  mDrawerLayout.closeDrawer(Gravity.LEFT);
                                  break;
          
                              case 1:
          
                                  getSupportFragmentManager()
                                          .beginTransaction()
                                          .replace(R.id.frame_container,
                                                  new NewsDateFragment()).commit();
                                  mDrawerLayout.closeDrawer(Gravity.LEFT);
                                  break;
                              case 2:
          
                                  getSupportFragmentManager()
                                          .beginTransaction()
                                          .replace(R.id.frame_container,
                                                  new GossipDateFragment()).commit();
                                  mDrawerLayout.closeDrawer(Gravity.LEFT);
                                  break;
                              case 3:
          
                                  getSupportFragmentManager()
                                          .beginTransaction()
                                          .replace(R.id.frame_container,
                                                  new StroriesFragment()).commit();
                                  mDrawerLayout.closeDrawer(Gravity.LEFT);
                                  break;
          
                              case 4:
          
                                  getSupportFragmentManager().beginTransaction()
                                          .replace(R.id.frame_container, new LearnFragment())
                                          .commit();
                                  mDrawerLayout.closeDrawer(Gravity.LEFT);
          
                                  break;
          
                              case 5:
          
                                  getSupportFragmentManager()
                                          .beginTransaction()
                                          .replace(R.id.frame_container,
                                                  new WordsFocusFragment()).commit();
                                  mDrawerLayout.closeDrawer(Gravity.LEFT);
                                  break;
          
                              case 7:
          
                                  getSupportFragmentManager()
                                          .beginTransaction()
                                          .replace(R.id.frame_container,
                                                  new SupportFragment()).commit();
                                  mDrawerLayout.closeDrawer(Gravity.LEFT);
                                  break;
          
                              case 8:
          
                                  // user.execute(user_id,intEventid);
          
                                  session.logoutUser();
          
                                  Intent i = new Intent(getApplicationContext(),
                                          LoginActivity.class);
                                  i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                  startActivity(i);
          
          
          
          
                                  mDrawerLayout.closeDrawer(Gravity.LEFT);
          
                                  break;
          
                              }
          
          
          
          
          
                  }
              });
          

          【讨论】:

            猜你喜欢
            • 2016-06-12
            • 2020-05-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-26
            • 1970-01-01
            相关资源
            最近更新 更多