我有4种类型片段的: OpenTextFragment, SingleRadioButtonFragment, DropdownSelectFragment and MultipleCheckboxesFragment
如何从ViewPager调用Fragment方法?
这些片段取决于我使用的元件类型显示在ViewPager。这些片段中有一个特定的功能(每个片段都是唯一的),我需要使用MainActivity
。
ViewPager能有什么,我需要
我需要获得当前片段是在我的ViewPager并使用特定的功能就是在上述
提到的不同片段的N个它。
我在做什么
,我显示在ViewPager这些片段的方法是使用FragmentPagerAdapter
:
public class QuestionsAdapter extends FragmentPagerAdapter {
private ArrayList<SurveyElement> mSurveyElements;
private int mAdapterSize = 0;
public QuestionsAdapter(FragmentManager fm) {
super(fm);
}
public void updateFragmentAdapter(ArrayList<SurveyElement> fragmentList) {
mSurveyElements = fragmentList;
mAdapterSize = fragmentList.size();
this.notifyDataSetChanged();
}
@Override
public Fragment getItem(int position) {
SurveyElement surveyElement = mSurveyElements.get(position);
switch (surveyElement.getElementType()) {
case SurveyElement.OPEN_TEXT:
return OpenTextFragment.newInstance(surveyElement, position + 1);
case SurveyElement.SINGLE_RADIOBUTTON:
return SingleRadioButtonFragment.newInstance(surveyElement, position + 1);
case SurveyElement.DROPDOWN_SELECT:
return DropdownSelectFragment.newInstance(surveyElement, position + 1);
case SurveyElement.MULTIPLE_CHECKBOXES:
return MultipleCheckboxesFragment.newInstance(surveyElement, position + 1);
default:
return OpenTextFragment.newInstance(surveyElement, position + 1);
}
}
@Override
public int getCount() {
return mAdapterSize;
}
}
我试图用这个函数来获取当前片段MainAcitivity
private boolean canIGoToNextQuestion(int position){ // mMyViewPager.getCurrentItem()
if (mQuestionsAdapter.getItem(position) instanceof OpenTextFragment){
OpenTextFragment openTextFragment = (OpenTextFragment) mQuestionsAdapter.getItem(position);
return openTextFragment.attemptAnswerQuestion();
}
// here goes the validations for the others fragments types
return false;
}
我正在用
当函数attemptAnswerQuestion()
被调用时,此函数内的所有元素都是null
。
看来我正在制作一个OpenTextFragment
的新实例。
好知道
我看到关于这个话题的几个职位,但所有的人都知道你的碎片的位置,但是,在我的情况可能是这样的:
OpenTextFragment
可以在位置0,
DropdownSelectFragment
在位置1,
MultipleCheckboxesFragment
位置2,
再次OpenTextFragment
在3位等等...