Android 如何在ViewPager中重新填充每个片段?

Android 如何在ViewPager中重新填充每个片段?,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我正在创建一个应用程序,其中必须显示问题类别以及与每个类别相关的问题。每个问题类别都有不同数量的问题。在选择一个类别时,我必须将问题屏幕显示为滑动屏幕,这意味着用户可以在滑动屏幕上移动到下一个问题。因此,我设计了一个包含两个片段的屏幕。第一个片段是显示类别列表的ListFragment,另一个片段是显示滑动问题的ViewPager。我能够在ViewPager中填充第一个类别(包含3个问题)的问题片段,但是当我从列表中选择另一个类别(包含5个问题)时,我无法替换前面的三个片段。它刚刚在ViewPa

我正在创建一个应用程序,其中必须显示问题类别以及与每个类别相关的问题。每个问题类别都有不同数量的问题。在选择一个类别时,我必须将问题屏幕显示为滑动屏幕,这意味着用户可以在滑动屏幕上移动到下一个问题。因此,我设计了一个包含两个
片段的屏幕。第一个片段是显示类别列表的
ListFragment
,另一个片段是显示滑动问题的
ViewPager
。我能够在
ViewPager
中填充第一个类别(包含3个问题)的问题片段,但是当我从列表中选择另一个类别(包含5个问题)时,我无法替换前面的三个
片段。它刚刚在
ViewPager
中添加了最后两个问题。我想用新的数据集重新填充
ViewPager
。我在下面添加了代码

问题细分活动

  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;
    }
}
}
公共类QuestionContainer扩展了片段{
可视寻呼机;
类别cvo;
公共类别getCvo(){
返回cvo;
}
公共无效设置cvo(类别cvo){
这个.cvo=cvo;
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(右布局问题)\容器,容器,
假);
ArrayList fragmentList=新建ArrayList();
for(QuestionVO qvo:cvo.getQuestionList()){
添加(新问题片段(qvo));
}
mPager=(ViewPager)view.findViewById(R.id.question\u ViewPager);
MyAdapter mAdapter=新的MyAdapter(getActivity().getSupportFragmentManager());
mAdapter.setFragmentList(碎片列表);
mPager.setAdapter(mAdapter);
返回视图;
}
公共静态类MyAdapter扩展了FragmentPagerAdapter{
ArrayList片段列表;
公共ArrayList getFragmentList(){
返回碎片列表;
}
公共void setFragmentList(ArrayList fragmentList){
this.fragmentList=碎片列表;
}
公共MyAdapter(FragmentManager fm){
超级(fm);
}
@凌驾
public int getCount(){
返回fragmentList.size();
}
@凌驾
公共片段getItem(int位置){
返回碎片列表。获取(位置);
}
@凌驾
public int getItemPosition(对象){
返回位置\无;
}
}
}
问题部分

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();
            }
        }
    });
}   
}
public class QuestionSection扩展ListFragment实现OnClickListener{
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.list\u fragment1,容器,错误);
返回视图;
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
按钮hideListSection=(按钮)getActivity().findViewById(
R.id.btn\u隐藏部分);
hideListSection.setOnClickListener(this);
ListView lv=getListView();
ArrayList listItem=新的ArrayList();
for(CategoryVO cvo:QuestionFragmentActivity.categoryList){
add(cvo.getCategoryName());
}
setAdapter(新的SectionListAdapter(getActivity(),listItem));
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、int pos、,
长arg3){
如果(位置==1){
FragmentManager FragmentManager=getFragmentManager();
FragmentTransaction FragmentTransaction=fragmentManager
.beginTransaction();
QuestionFragmentActivity.categoryPosition=pos;CategoryVO cvo=
QuestionFragmentActivity.categoryList.get(pos);
QuestionContainer片段=新的QuestionContainer();
片段.setCvo(cvo);
fragmentTransaction.replace(R.id.question\u fragment\u容器
,fragment);fragmentTransaction.commit();
}
}
});
}   
}
强制重画ViewPager。首先进行适当的更改,然后进行刷新

编辑:适配器。notifyDataSetChanged()使现有数据无效,以准备新数据。如果你现在还没用,一定要调查一下

强制重画ViewPager。首先进行适当的更改,然后进行刷新


编辑:适配器。notifyDataSetChanged()使现有数据无效,以准备新数据。如果你现在还没用,一定要调查一下

我正在替换类别列表中单击的片段,这将重新创建片段并再次调用
ViewPager.setAdapter(pager\u adapter)
重置
ViewPager的适配器后,它对我不起作用
我正在单击类别列表替换片段,这将重新创建片段并再次调用
ViewPager.setAdapter(pager\u adapter)
重置
ViewPager的适配器后,它对我不起作用
ViewPager.setAdapter(pager_adapter)