0

this is my project's construct,as show below: this is my project's construct

Fragment1 hava an viewpager to nest two child Fragment:A and B, Fragment2,3,4 both like this. Then Fragment A and B both hava refreshData() method to refresh data.Now Fragment1 hava a button to select city. I want to refresh Fragment A and B after change city.

But when I switch from Fragment1 to Fragment4 ,then switch back to Fragment1 and click button to change city , when call refreshData() ,the getActivity() method returned null ,so will show NullPointerException error .

that make me crazy.FragmentA and FragmentB both executed onCreateView, why getActivity() return null?

Fragment A code:

public class Fragment1 extends Fragment {


public Fragment1() {
    // Required empty public constructor
}


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

    return inflater.inflate(R.layout.fragment_fragment1, container, false);
}



public void refreshData(String city){

    if ( null != getActivity()){

        //get data from webservice
    }

}


}

Fragment1.java :

    private List<Fragmnet> mFragmentList;
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    mFragmentList = new ArrayList<>();
    mFragmentList.add(new FragmentA());
    mFragmentList.add(new FragmentB());
    View v =inflater.inflate(R.layout.fragment_creadit, container, false);

    viewPager = (ViewPager) v.findViewById(R.id.pager);

    adapter = new ViewPagerAdapter(getResources(),  getChildFragmentManager(),titleList,mFragmentList);


    viewPager.setAdapter(adapter);


    return v;



}

update:I know why getActivity() return null . That's because Fragment1 will show old fragmentA and FragmentB even you reexecute Fragment1's onCreateView() to add new FragmentA\b and change fragmentAdapter's data.
so i change the Fragment1's onCreateView() to :

List<Fragmnet> mFragmentList ;

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



    if(  null ==  mFragmentList){
    mFragmentList  = new ArrayList<>();
    mFragmentList.add(new FragmentA());
    mFragmentList.add(new FragmentB());
    }

    View v =inflater.inflate(R.layout.fragment_creadit, container, false);

    viewPager = (ViewPager) v.findViewById(R.id.pager);

    adapter = new ViewPagerAdapter(getResources(),  getChildFragmentManager(),titleList,mFragmentList);


    viewPager.setAdapter(adapter);


    return v;



}

so when i call refreshData() ,this is old FragmentA's refreshData() ,not the new FragmentA's .

ceej
  • 1,863
  • 1
  • 15
  • 24
2010cpu
  • 1
  • 1
  • Possible duplicate of [What is a Null Pointer Exception, and how do I fix it?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) – Nathan Tuggy Nov 04 '15 at 03:08
  • @NathanTuggly , I hava find the reason . your recomment not the nature of this question,bug i stll thank you. – 2010cpu Nov 04 '15 at 03:37

0 Answers0