Görüntüleyici ve fragmanlarla adroid uygulaması yapıyorum. Fragmanı sayfalara dinamik olarak eklemek veya çıkarmak için bir seçenek yapmak istiyorum. Özel bir FragmentPagerAdapter vardır: I) (I notifyDataSetChanged bir NullPointerException var kaldırmak için denediğimde 0'a dışında herhangi parçasını kaldırmakparçaları görüntüleyiciye düzgün bir şekilde yerleştirin ve çıkarın
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;
}
}
; veya pager.setAdapter (bu) üzerinde; Eğer bildirimi açıklarsam.
Yeni bir sayfa eklemeye çalıştığımda NullPointerException da var. Yeni sayfayı listenin sonuna eklediğimde, iyi çalışıyor. Ben getFragmentTag(i-1)
kullanırsanız Hatta fragments.add sonra bununla prospektüste parçaları readd çalıştı (pos, f)
for(int i=0;i<fragments.size();i++){
if(i>=pos){
getSupportFragmentManager().beginTransaction().add(fragments.get(i).toFragment(),getFragmentTag(i-1)).commit();
}
}
Ben nullpointer tekrar aldım. Sadece i
kullanarak, fragmanın etiketini değiştiremediği için illegalalstateexception var. ne yanlış yapıyorum ve nasıl düzgün yapılabilir: beginTransaction().add(pager.getId,fragments.get(i).toFragment())
sayesinde
Sorum şu ... hala nullpointer mı? (Ve belki de: nedenleri NullPointerException zaman notyfyDataSetChanged()
veri almak yerden)
Bağlantı sadece cevaplar tavsiye edilmez. –