многостраничный просмотрщик с одним фрагментом

Я должен пояснить, что я ищу пример или ответ, в котором я могу использовать различные варианты макетов в окне просмотра, и данные на всех страницах будут динамическими, и пользователь сможет взаимодействовать со всеми страницами.

Мой вариант использования и текущий подход к проблеме:

Итак, у меня есть 8 различных типов типов вопросов, и поэтому я создалlayouts для всех них. Также я данные в представлениях для этих макетов должен быть заполнен через JavaMap который получил данные из базы данных sqlite.

Но тест может содержать 25 вопросов с разным расположением из вышеперечисленных 8. И для всех этих 25 вопросов я хочу использоватьViewpager иFragment который вернет требуемый макет на основе переданногозначение типа вопроса из моей карты Java.

Мой apporach к этому:

Я создал действие и накачал его макетом видоискателя:

R.layout.practice_pager *

Активность Отредактированный код *

       public class TestActivity extends FragmentData implements FragmentData{

            FragmentManager manager=getSupportFragmentManager();
            private ViewPager mViewPager;  
            private MyFragmentPagerAdapter mMyFragmentPagerAdapter;
            int PAGE_COUNT = 0;
            GrePracticeTestRecord p=new GrePracticeTestRecord();
            private HashMap mPracResultMap;

            public static int fragmentToReturn=0;


            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.practice_pager);

                mViewPager = (ViewPager) findViewById(R.id.test_container);  

           //This function is called to fetch the data from sqlite db and fill the map with data
                LoadingTestView();

                PAGE_COUNT=mPracRecordMap.size();
                    initPager();
              }

        //here I initialize the pager and set the adapter to it
        public void initPager()
    {
     p.setQUES(mPracRecordMap.get(1).getQUES());
     p.setEXPL(mPracRecordMap.get(1).getEXPL());    

     fragmentToReturn=Integer.parseInt(mPracRecordMap.get(1).getQTYPE());
     setData(p);

     mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),fList);  
     mViewPager.setAdapter(mMyFragmentPagerAdapter);  

     mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {

            mMyFragmentPagerAdapter.notifyDataSetChanged();

            p.setQUES(mPracRecordMap.get(mViewPager.getCurrentItem()+1).getQUES());
            p.setEXPL(mPracRecordMap.get(mViewPager.getCurrentItem()+1).getEXPL());

            setData(p);

        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
  }

           @Override
        public void setData(GrePracticeTestRecord p) {
            // TODO Auto-generated method stub

        }

        @Override
        public GrePracticeTestRecord getData() {
            // TODO Auto-generated method stub
            return p;
        }
    }

Мой адаптер Отредактированный код

   public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter{

         private List fragments;

        public MyFragmentPagerAdapter(FragmentManager fm,List fragments) {
            super(fm);
            this.fragments = fragments;
        }

        /** This method will be invoked when a page is requested to create */
        @Override
        public Fragment getItem(int position) {
            System.out.println("value of position "+position);
            return this.fragments.get(position);
        }


        /** Returns the number of pages */
        @Override
        public int getCount() {
            return this.fragments.size();
        }

        @Override
        public int getItemPosition(Object object) {
            // TODO Auto-generated method stub
            return MyFragmentPagerAdapter.POSITION_NONE;
        }
    }

Интерфейс FragmentData

public interface FragmentData {
    public void setData(GrePracticeTestRecord p);
    public GrePracticeTestRecord getData();
}

TestFragment Отредактированный код

открытый класс TestFragment extends Fragment {}

AnswerEnterListener callBack;
FragmentData fD;
Button submitAnswer;
EditText userAnswer;

TextView qText,expl;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
          return inflater.inflate(R.layout.qtype1, container, false);
}

public interface AnswerEnterListener
{
    public void onInputAnswer(String ans);
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    try {
        callBack=(AnswerEnterListener) activity;
        fD=(FragmentData) activity;
    } catch (Exception e) {
        // TODO: handle exception
    }
}

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


    qText=(TextView) getActivity().findViewById(R.id.question_text);
    expl=(TextView)getActivity().findViewById(R.id.explanation_text);


    qText.setText(Html.fromHtml(fD.getData().getQUES()));
    expl.setText(Html.fromHtml(fD.getData().getEXPL()));

}       

Подобно TestFragment, у меня тоже нет других фрагментов. Каждый для типа макета.

Вопросы :

Первый макет повторяется два раза в первый раз, а также, когда я проведу назад, тогда положение данных будет смещено.Является ли это правильным подходом, кто-то мне предложил, чтобы вы использовали три фрагмента и обновили левый и правый фрагменты данными, но это фактически отразило меня. Может кто-нибудь поделиться хорошим примером этого или блогом.

Ответы на вопрос(1)

Ваш ответ на вопрос