我有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位等等...