How can I communicate/pass data through different Fragments with Swipe Tab?

后端 未结 1 1284
故里飘歌
故里飘歌 2021-01-21 04:46

Hi I have a Swipe Tab Fragment Activity that contains Three Fragments. I created my own adapter that extends FragmentStatePageAdapter.

Now here I\'ll explain how each ta

相关标签:
1条回答
  • 2021-01-21 05:07

    what I usually do is:

    1.- Define the interface. It's done, fine.

    2.- Your FragmentGeneralSymptoms must have an initializated listener. Yuou're that but you forgot to set the listener in the class.

    public class FragmentGeneralSymptoms extends ListFragment implements OnItemClickListener {
        ArrayList<String> symptomList;
        String name;
        String selected;
        Tray tray;
    
        (your code)
    
        public void setTrayListener(Tray listener)
        {
            tray = listener;
        }
    
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            // TODO Auto-generated method stub
            selected = symptomList.get(arg2);
            if(tray != null)
            {
               symptomList.remove(selected); // if you want to remove this element from this list
               tray.respond(selected);
            }
        } }
    

    3.- Your FragmentTray class must implement the interface:

    public class FragmentTray extends ListFragment implements Tray{
    private ArrayList<String> selectedList;
    
    public FragmentTray(){}
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        return inflater.inflate(R.layout.fragment_tray, container, false);
    }
    
    public void addToTray(String symptom){
        selectedList.add(symptom);
        setListAdapter(new ArrayAdapter<String>(getActivity(),
                R.layout.general_list, selectedList));
    }
    
    public void removeSymptom(String string){
        selectedList.remove(selectedList.indexOf(string));
    }
    
    public void respond(String name)
    {
    
    // do stuffs!!!!
    selectedList.add(new Symtom(name)); // for example
    System.out.println("Inside the respond method respond in FragmentTray class");
    
    }
    }
    

    4.- And last but not least. When you build the fragments you must register the listener:

    class MyAdapter extends FragmentStatePagerAdapter {
    
        private List<Fragment> fragmentList;
    
        public MyAdapter(FragmentManager fm) {
            super(fm);
            // TODO Auto-generated constructor stub
            fragmentList = new ArrayList<Fragment>();
    
            Fragment fragmentBodyPart = new FragmentBodyPart();
            Fragment fragmentTray = new FragmentTray();
            Fragment fragmentGeneralSymptoms = new FragmentGeneraSymptoms();
    
            // this is important*********************************
            fragmentGeneraSmptoms.setTrayListener(fragmentTray);
    
            fragmentList.add(fragmentBodyPart);
            fragmentList.add(fragmentGeneralSymptoms);
            fragmentList.add(fragmentTray);
        }
    
        @Override
        public Fragment getItem(int arg0) {
            // TODO Auto-generated method stub
            Fragment fragment = null;
            Bundle bundle = new Bundle();
            bundle.putString("key", selectedProfileName);
            if (arg0 == 0) {
                fragment = (Fragment) fragmentList.get(0);
                fragment.setArguments(bundle);
            }
            if (arg0 == 1) {
                fragment = (Fragment) fragmentList.get(1);
                fragment.setArguments(bundle);
            }
            if (arg0 == 2) {
                fragment = (Fragment) fragmentList.get(2);
            }
            return fragment;
        }
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return fragmentList.size();
        }
    
    }
    

    I hope that it helps.

    0 讨论(0)
提交回复
热议问题