1

質問カテゴリと各カテゴリに関連する質問を表示する必要があるアプリケーションを作成しています。質問カテゴリごとに質問の数が異なります。カテゴリを選択すると、スライド画面として質問画面を表示する必要があります。これは、ユーザーがスライドで次の質問に移動できることを意味します。ということで、2枚で画面をデザインしましたFragment。最初のフラグメントはListFragmentカテゴリのリストを表示するフラグメントで、もう 1 つはViewPagerスライド式の質問を表示するフラグメントです。最初のカテゴリ (3 つのクエリを含む)に質問フラグメントを入力できましたがViewPager、リストから別のカテゴリ (5 つのクエリを含む) を選択すると、前の 3 つを置き換えることができませんでしたFragment。の最後の 2 つの質問を追加しただけViewPagerです。ViewPager新しいデータ セットを再設定したい。以下のコードを追加しました。

QuestionFragmentActivity

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.questions_activity);

        if (findViewById(R.id.question_section_fragment_container) != null) {
            /*
             * if (getIntent().getExtras() != null) { return; }
             */
            QuestionSection firstFragment = new QuestionSection();
            firstFragment.setArguments(getIntent().getExtras());
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.question_section_fragment_container,
                            firstFragment).commit();
        }

        categoryPosition = 0;//static variable to hold the position of category item selected.
        CategoryVO cvo = QuestionFragmentActivity.categoryList
                .get(categoryPosition);

        if (findViewById(R.id.question_fragment_container) != null) {
            /*
             * if (getIntent().getExtras() != null) { return; }
             */
            QuestionContainer firstFragment = new QuestionContainer();
            firstFragment.setCvo(cvo);
            firstFragment.setArguments(getIntent().getExtras());
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.question_fragment_container,
                            firstFragment).commit();
        }
   }

QuestionContainer.java

public class QuestionContainer extends Fragment {
ViewPager mPager;
CategoryVO cvo;

public CategoryVO getCvo() {
    return cvo;
}
public void setCvo(CategoryVO cvo) {
    this.cvo = cvo;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.question_container, container,
            false);
    ArrayList<QuestionFragment> fragmentList=new ArrayList<QuestionFragment>();
    for(QuestionVO qvo: cvo.getQuestionList()){
        fragmentList.add(new QuestionFragment(qvo));
    }
    mPager = (ViewPager) view.findViewById(R.id.question_viewpager);
    MyAdapter mAdapter = new MyAdapter(getActivity().getSupportFragmentManager());
    mAdapter.setFragmentList(fragmentList);
    mPager.setAdapter(mAdapter);
    return view;
}

public static class MyAdapter extends FragmentPagerAdapter {
    ArrayList<QuestionFragment> fragmentList;       

    public ArrayList<QuestionFragment> getFragmentList() {
        return fragmentList;
    }
    public void setFragmentList(ArrayList<QuestionFragment> fragmentList) {
        this.fragmentList = fragmentList;
    }
    public MyAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public int getCount() {
        return fragmentList.size();
    }

    @Override
    public Fragment getItem(int position) {
                    return fragmentList.get(position);
    }
    @Override
    public int getItemPosition(Object object) {
            return POSITION_NONE;
    }
}
}

質問セクション

public class QuestionSection extends ListFragment implements OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.list_fragment1, container, false);
    return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    Button hideListSection = (Button) getActivity().findViewById(
            R.id.btn_hide_section);
    hideListSection.setOnClickListener(this);
    ListView lv = getListView();
    ArrayList<String> listItem = new ArrayList<String>();
    for (CategoryVO cvo : QuestionFragmentActivity.categoryList) {
        listItem.add(cvo.getCategoryName());
    }
    lv.setAdapter(new SectionListAdapter(getActivity(), listItem));
    lv.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int pos,
                long arg3) {
            if (pos == 1) {
                  FragmentManager fragmentManager = getFragmentManager();
                  FragmentTransaction fragmentTransaction = fragmentManager
                  .beginTransaction();
                  QuestionFragmentActivity.categoryPosition=pos; CategoryVO cvo=
                  QuestionFragmentActivity.categoryList.get(pos);

                  QuestionContainer fragment = new QuestionContainer();
                  fragment.setCvo(cvo);
                  fragmentTransaction.replace(R.id.question_fragment_container
                  , fragment); fragmentTransaction.commit();
            }
        }
    });
}   
}
4

1 に答える 1

1
ViewPager.setAdapter(pager_adapter)

ViewPager の再描画を強制します。最初に適切な変更を行い、更新のためにこれを行います。

編集: Adapter.notifyDataSetChanged() は既存のデータを無効にして、新しいデータの準備をします。今まで使っていないという方は参考にしてください。

于 2012-11-24T17:53:18.850 に答える