如何从父片段发送某些数据到子片段?

问题描述 投票:0回答:1

我是一名Android新手。我想使用以下界面进行通信,但无法正常工作。空点继续发生。我使用viewpager Fragment来组织一个由父母和孩子组成的Tab片段。我想将一些数据从父母发送给孩子。但这并不容易。

我不确定为什么。我将代码附加在一起。你能告诉我我哪里错了吗!!

父片段

    public class fragment_menu_2_category extends Fragment implements ViewPager.OnPageChangeListener{

    public static Object Test_Listener;

    ImageView menu_2_category_open_btn;


    //interface
    private CustomListener customListener;

    public interface CustomListener{
        void onPositiveClicked(String name);

    }


    public void setListener(CustomListener customDialogListener){
        this.customListener = customDialogListener;
    }



    static String test_bundel="";
    public static int a = 0;

    public static fragment_menu_2_category newInstance()
    {
        return new fragment_menu_2_category();
    }

    private ViewPager mViewPager;

    SectionPageAdapter adapter;

    fragment_menu_2_category_Outer fragment_menu_2_category_outer;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {



        return inflater.inflate(R.layout.fragment_category, container, false);



    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        mViewPager = (ViewPager) view.findViewById(R.id.container11);
        adapter = new SectionPageAdapter(getChildFragmentManager());




        adapter.addFragment(new fragment_menu_2_category_All(), "ALL");
        adapter.addFragment(new fragment_menu_2_category_Outer(), "OUTER");
        adapter.addFragment(new fragment_menu_2_category_Top(), "TOP");
        adapter.addFragment(new fragment_menu_2_category_Skirt(), "SKIRT");
        adapter.addFragment(new fragment_menu_2_category_Pants(), "PANTS");
        adapter.addFragment(new fragment_menu_2_category_Onepiece(), "ONEPIECE");



        mViewPager.setAdapter(adapter);

        mViewPager.setOffscreenPageLimit(3);


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

        menu_2_category_open_btn = view.findViewById(R.id.menu_2_category_open_btn);
        menu_2_category_open_btn.setOnClickListener(open_category);

    }

     View.OnClickListener open_category = new View.OnClickListener() {
         @Override
         public void onClick(View v) {

             category_dialog category_dialog = new category_dialog(getContext(), R.layout.menu_2_category_dialog);

             category_dialog.show();

             category_dialog.setDialogListener(new category_dialog.CustomDialogListener() {
                 @Override
                 public void onPositiveClicked(String name) {

                   category_dialog.dismiss();


                     String test_date = "test date";
                     customListener.onPositiveClicked(test_date);
                     fragment_menu_2_category_Outer fragment_menu_2_category_outer = new fragment_menu_2_category_Outer();



                   adapter.replaceFragment(1, fragment_menu_2_category_outer,"OUTER");
                  //뷰페이저
                   mViewPager.setCurrentItem(1, true);
                   adapter.notifyDataSetChanged();


                 }


             });



         }


     };


    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {




    }

    @Override
    public void onPageScrollStateChanged(int state) {

      adapter.notifyDataSetChanged();

    }
}

子片段

public class fragment_menu_2_category_Outer extends Fragment {


    RecyclerView category_name_recyclerview;
    fragment_menu_2_category_name_Adapter name_adapter;
    ArrayList<fragment_menu_2_category_name_Array> name_array;


    RecyclerView outer_category_product_recyclerview;
    fragment_menu_2_category_Adapter outer_category_adapter;
    ArrayList<fragment_menu_2_category_Array> outer_category_array;



    int get_category_position = 0;


    public static fragment_menu_2_category_Outer newInstance(String name)
    {
        fragment_menu_2_category_Outer fragment = new fragment_menu_2_category_Outer();
        Bundle args = new Bundle();
        args.putString("key", name);
       fragment.setArguments(args);
        return fragment;


    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);



        if(getArguments()!=null){
        a = getArguments().getString("key");
      }

        }

    @Override
    public void onResume() {
        super.onResume();

        fragment_menu_2_category fragment_menu_2_category = new fragment_menu_2_category();

        fragment_menu_2_category.setListener(new fragment_menu_2_category.CustomListener() {
            @Override
            public void onPositiveClicked(String name11) {
              Log.d("Test", name11);
           }
        });
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {



       return inflater.inflate(R.layout.fragment_menu_2_category_outer, container, false);






    }

ViewPagerAdapter

public class SectionPageAdapter extends FragmentPagerAdapter {

    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();





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

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

    public SectionPageAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {



        return mFragmentList.get(position);
    }

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

    @Override
    public int getItemPosition(@NonNull Object object) {


        return POSITION_NONE;



    }




    public void replaceFragment(int index, Fragment fragment, String title) {

        if(index==1)
        {

            mFragmentList.set(index, fragment);


        }


        mFragmentTitleList.set(index, title);
    }
}
android android-viewpager fragment
1个回答
0
投票

在父片段onCreateView()中,获取子片段的引用。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    View view = inflater.inflate(R.layout.parent_fragment, container, false);
    YourChildFragment child = (YourChildFragment) getChildFragmentManager().findFragmentById(R.id.child_fragment_id);

    //do whatever you want with your child (fragment)
    //e.g.
    child.newInstance("hello");


    return view;
}

这样,您无需将方法设为静态。 :)

© www.soinside.com 2019 - 2024. All rights reserved.