뷰 페이지와 프래그먼트로 adroid 애플리케이션을 만들고 있습니다. 프래그먼트 페이지를 페이저에 동적으로 추가하거나 제거하는 옵션을 만들고 싶습니다. 나는 사용자 정의 FragmentPagerAdapter이 : 나는) (필자는 notifyDataSetChanged에 NullPointerException이있어이를 제거하려고 할 때이 0을 제외한 모든 조각을 제거 할 수 있습니다뷰 파인더에 조각을 올바르게 삽입하고 조각을 제거하십시오.
public class MyAdapter extends FragmentPagerAdapter implements TitleProvider{
protected final List<PageFragment> fragments;
/**
* @param fm
* @param fragments
*/
public MyAdapter(FragmentManager fm, List<PageFragment> fragments) {
super(fm);
this.fragments = fragments;
}
public void addItem(PageFragment f){
fragments.add(f);
notifyDataSetChanged();
}
public void addItem(int pos, PageFragment f){
for(int i=0;i<fragments.size();i++){
if(i>=pos){
getSupportFragmentManager().beginTransaction().remove(getSupportFragmentManager().findFragmentByTag(getFragmentTag(i))).commit();
}
}
fragments.add(pos,f);
notifyDataSetChanged();
pager.setAdapter(this);
pager.setCurrentItem(pos);
}
public void removeItem(int pos){
getSupportFragmentManager().beginTransaction().remove(getSupportFragmentManager().findFragmentByTag(getFragmentTag(pos))).commit();
for(int i=0;i<fragments.size();i++){
if(i>pos){
getSupportFragmentManager().beginTransaction().remove(getSupportFragmentManager().findFragmentByTag(getFragmentTag(i))).commit();
}
}
fragments.remove(pos);
notifyDataSetChanged();
pager.setAdapter(this);
if(pos<fragments.size()){
pager.setCurrentItem(pos);
}else{
pager.setCurrentItem(pos-1);
}
}
@Override
public Fragment getItem(int position) {
return fragments.get(position).toFragment();
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
private String getFragmentTag(int pos){
return "android:switcher:"+R.id.pager+":"+pos;
}
public String getTitle(int position) {
String name = fragments.get(position).getName();
if(name.equals(""))
return "- "+position+" -";
return name;
}
}
을; 또는 pager.setAdapter (this); 내가 그 통보를 논평하면.
새 페이지를 삽입하려고하면 NullPointerException도 발생합니다. 새 페이지를 목록 끝에 추가하면 정상적으로 작동합니다. I는 getFragmentTag(i-1)
사용할 경우 I 심지어 fragments.add 후이 함께 인서트 단편을 다시 추가하려 (POS는 F)
for(int i=0;i<fragments.size();i++){
if(i>=pos){
getSupportFragmentManager().beginTransaction().add(fragments.get(i).toFragment(),getFragmentTag(i-1)).commit();
}
}
I는 nullpointer 다시 얻었다. i
을 사용하면 조각의 태그를 수정할 수 없기 때문에 illegalstateexception을 얻었습니다. beginTransaction().add(pager.getId,fragments.get(i).toFragment())
은 여전히 nullpointer입니다 ...
내 질문은 : 무엇을 잘못하고 있으며 어떻게 제대로 할 수 있습니까? (그리고 아마도 : notyfyDataSetChanged()
은 nullpointerexception이 발생했을 때 데이터를 얻습니다.)
링크 만 대답하는 것은 좋지 않습니다. –