I've been struggling with this error since the last week. Here it is:
public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
AppSectionsPagerAdapter mAppSectionsPagerAdapter;
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager(), getApplicationContext());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mAppSectionsPagerAdapter);
...
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.refresh:
mAppSectionsPagerAdapter.onRefresh();
return true;
...
}
public class AppSectionsPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> fragmentList;
private MainSectionFragment f1, f2;
private SelectedSectionFragment f3;
public AppSectionsPagerAdapter(FragmentManager fm, Context c) {
f3 = new SelectedSectionFragment();
f2 = new MainSectionFragment();
f1 = new MainSectionFragment();
fragmentList = new ArrayList<Fragment>();
fragmentList.add(f1);
fragmentList.add(f2);
fragmentList.add(f3);
...
}
public void onRefresh(){
MainSectionFragment fragment = (MainSectionFragment)fragmentList.get(0);
fragment.fetchList();
}
...
}
public class MainSectionFragment extends Fragment implements CallbackListener {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//some initialization
c = getActivity().getApplicationContext(); // tested and it gets initialized
System.out.println(""+hashCode());
...
}
void fetchList() {
System.out.println(""+hashCode());
android.support.v4.app.FragmentManager manager = getActivity().getSupportFragmentManager();
...
}
}
I navigate from ActivityMain
and it dies. When I get back the list is scrollable vertically and horizontally. If I click refresh button NullPointerException
arises. I've debugged the program. OnCreateView()
is called when I return from SettingsActivity, but when I click refresh button, every field of MainSectionFragment
becomes null.
Printed hashcodes before exception:
05-25 01:54:37.190: I/System.out(5982): 1091848056 //onCreateView()
05-25 01:54:42.680: I/System.out(5982): 1091574888 //fetchList()
Can't understand why are these objects different.
Let me know if my question is not clear.
UPDATE 1
I have checked 'Don't keep activities' option in dev tools. I have verified that MainActivitys onCreate
is called after going back from SettingsActivity
UPDATE 2
Going to SettingsActivity detaches the fragments. Returning from SettingsActivity attaches the fragments again.