0

首先让我试着重现我的问题/问题。SectionsPageAdapter with FragmentPageAdapter

我的活动是带有3个选项卡的TabbedActivity,使用SectionPageAdapter和FragmentPageAdapter完成。

在这3个选项卡上,用户输入数据。只需滑动,用户可以更改选项卡。在用户填写完所有数据后,他必须点击一个FloatingActionButton来保存数据。

现在有我的问题我不知道如果我可以访问这些3填充数据的片段? 我是否可以加载所有3个碎片以填充数据,读取数据并保存它,或者在更改页面之前是否必须处理PageChangeListenEvent并保存数据?

代码:

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

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

    @Override 
    public Fragment getItem(int position) { 

     return TravelInfoActivity.PlaceholderFragment.newInstance(position + 1); 
    } 

    @Override 
    public int getCount() { 
     return maxTabs; 
    } 

} 


public static class PlaceholderFragment extends Fragment { 

    private static final String ARG_FRAGMENT_ID = "fragment_id"; 
    private static int REQUEST_CODE_PLACE = 1; 
    private View currentRootView; 
    private View currentClickedView; 

    @SuppressLint("UseSparseArrays") 
    private HashMap<Integer, View> hMap = new HashMap<>(); 


    public PlaceholderFragment() { 
    } 

    /** 
    * Returns a new instance of this fragment for the given section 
    * number. 
    */ 
    public static TravelInfoActivity.PlaceholderFragment newInstance(int sectionNumber) { 
     TravelInfoActivity.PlaceholderFragment fragment = new PlaceholderFragment(); 
     Bundle args = new Bundle(); 
     int fragmentLayout; 
     switch (sectionNumber) { 
      case 1: 
       fragmentLayout = R.layout.fragment_accommodation; 
       break; 
      case 2: 
       fragmentLayout = R.layout.fragment_visited_places; 
       break; 
      case 3: 
       fragmentLayout = R.layout.fragment_additional_info; 
       break; 
      default: 
       fragmentLayout = R.layout.fragment_accommodation; 
     } 
     args.putInt(ARG_FRAGMENT_ID, fragmentLayout); 
     fragment.setArguments(args); 
     return fragment; 
    } 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     final View rootView = inflater.inflate(getArguments().getInt(ARG_FRAGMENT_ID), container, false); 
     currentRootView = rootView; 
     switch (getArguments().getInt(ARG_FRAGMENT_ID)) { 
      // switch handling here, not relevant 
     } 
return rootView; 
    } 

回答

0

家伙,我已经做了刷新我的大脑;)

单从片段实例保存到一个数组,你以后可以使用它。 我在SectionPageAdapter中创建了这个方法,并且使用了方法instantiateItem()

public class SectionsPagerAdapter extends FragmentStatePagerAdapter { 

    private SparseArray<Fragment> registeredFragments = new SparseArray<>(); 

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


    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     Fragment fragment = (Fragment) super.instantiateItem(container, position); 
     Integer fragmentId = fragment.getArguments().getInt("fragment_id"); 
     registeredFragments.put(fragmentToPageMap.get(fragmentId), fragment); 

     return fragment; 
    } 

    public Fragment getRegisteredFragment(int position) { 
     return registeredFragments.get(position); 
    } 

    public boolean registeredFragmentExists(int position) { 
     if(registeredFragments.size() >= position) { 
      if(registeredFragments.get(position) != null) { 
       return true; 
      } 
     } 
     return false; 
    } 


    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a PlaceholderFragment (defined as a static inner class below). 
     return TravelInfoActivity.PlaceholderFragment.newInstance(position); 
    } 

    @Override 
    public int getCount() { 
     return maxTabs; 
    } 

} 

稍后,您可以用

mSectionsPagerAdapter.getRegisteredFragment(position); 
fragment.getActivity().findViewById(id); 
访问片段rootView
相关问题