2012-11-24 4 views
1

나는 각 범주와 관련된 질문 범주와 질문을 표시해야하는 응용 프로그램을 만들고 있습니다. 각 질문 카테고리는 서로 다른 수의 질문을 가지고 있습니다. 범주를 선택하면 질문 화면을 슬라이딩 화면으로 표시해야하므로 슬라이딩 할 때 다음 질문으로 이동할 수 있습니다. 그래서 나는 두 개의 화면으로 Fragment을 선정했습니다. 첫 번째 조각은 범주 목록을 표시하는 ListFragment이고 다른 하나는 슬라이딩 질문을 표시하는 ViewPager입니다. 나는 첫번째 카테고리 (3 개의 ques 포함)에 대해 ViewPager에 Question Fragments를 채울 수 있었지만, List에서 다른 카테고리 (5 개의 ques 포함)를 선택하면 이전 3 개를 바꿀 수 없었습니다. Fragment. 마지막으로 두 개의 질문을 ViewPager에 추가했습니다. 새로운 데이터 세트로 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; 
    } 
} 
} 

QuestionSection

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(); 
      } 
     } 
    }); 
} 
} 

답변

1
01,

은 ViewPager를 강제로 다시 그립니다. 먼저 적절한 변경을 수행하고 새로 고침을 위해이를 수행하십시오.

편집 : Adapter.notifyDataSetChanged()는 새 데이터를 준비하기 위해 기존 데이터를 무효화합니다. 당신이 그것을 지금까지 사용하지 않는다면 그것을 조사하십시오.

+0

조각을 다시 만들고 다시 'ViewPager.setAdapter (pager_adapter)'를 호출 할 클릭 목록의 조각을 바꿀 것입니다. – Nishant

+0

'ViewPager'에 대한 어댑터를 재설정 한 후에 작동하지 않았습니다. – Nishant

관련 문제