1

Ich habe zwei Fragmente .. ich meinen Listview-Adapter adapter.notifyDataSetChanged() in setUserVisibleHint Methode in meinem ersten Fragmente auffrischen will:Refresh-Adapter in Fragmente, wenn es sichtbar ist

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if(isVisibleToUser){ 
     adapter.notifyDataSetChanged(); 
    } 
} 

Aber ich bekomme diese Ausnahme:

java.lang.NullPointerException bei com.androidbelieve.drawerwithswipetabs.FirstFragment.setUserVisibleHint (FirstFragment.java:247) bei android.support.v4.app.FragmentPagerAdapter.setPrimaryItem (FragmentPagerAdapter.java:130) bei android.support.v4.view.ViewPager.populate (ViewPager.java:1175)

Es tut mir leid ich ein wenig über Fragmente wissen, was ist das "setPrimaryItem"!?

Das ist mein Tab Fragment:

public class TabFragment extends Fragment { 
View x; 
public static TabLayout tabLayout; 
public static ViewPager viewPager; 
public static int int_items = 2 ; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     x = inflater.inflate(R.layout.tab_layout,null); 
     tabLayout = (TabLayout) x.findViewById(R.id.tabs); 
     viewPager = (ViewPager) x.findViewById(R.id.viewpager); 
     viewPager.setOffscreenPageLimit(2); 

    viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 
    viewPager.getCurrentItem(); 
    viewPager.addOnPageChangeListener(new OnPageChangeListener() { 


     @Override 
     public void onPageSelected(int position) { 
     } 

     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 
     } 
    }); 


    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
       tabLayout.setupWithViewPager(viewPager); 
       } 
    }); 

    return x; 
} 

class MyAdapter extends FragmentPagerAdapter{ 
    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 


    @Override 
    public Fragment getItem(int position) 
    { 
     switch (position){ 
      case 0 : return new FirstFragment(); 
      case 1 : return new ZZZFavorites(); 
     } 
    return null; 
    } 

    @Override 
    public int getCount() { 
     return int_items; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position){ 
      case 0 : 
       return "Online"; 
      case 1 : 
       return "Favorites"; 
     } 
      return null; 
     } 
    } 
} 
+0

Ihr 'Adapter' ist' null'. – azizbekian

+0

@azizbekian JA, ich habe es in einen Zustand versetzt, um es zu überprüfen, bevor ich es aktualisiere. jetzt funktioniert es gut. danke – DastakWall

+0

Würdest du deine Frage entfernen, oder erwartest du, dass sie beantwortet wird? – azizbekian

Antwort

1

Ihre adapter ist null. Führen Sie vor dem Zugriff null-check aus.

if (isVisibleToUser && adapter != null) { 
    adapter.notifyDataSetChanged(); 
} 
Verwandte Themen