I am trying to dynamically add fragments (webView) inside a VerticalViewPager which is included in an HorizontalViewpager. It works perfectly if I statically add the pages (fragments) from my HorizontaViewPager class, instead I get an NullPointerException if I try to add a new VerticalViewPager for example only when the third "page" (the third VerticalViewPager) is shown. Substantially the new pages (the new VerticalViewPagers) are added correctly without errors, but the NullPointerException is received when I try to scroll, after added the new VerticalViewPager, from the next fragments to the previous (for example from the fragment 5 to the fragment 4).
This is my code:
HorizontalViewPager class
public class HorizontalViewPagerCreator extends FragmentActivity {
addPage();
addPage();
addPage();
addPage();
horizPageAdapter = new PagerAdapter(super.getSupportFragmentManager(), horizfragments);
horizViewPager = (ViewPager)super.findViewById(R.id.pager);
horizViewPager.requestTransparentRegion(horizViewPager); //prova per rimuovere il flickr
horizViewPager.setOffscreenPageLimit(horizPageAdapter.getCount() - 1);
horizViewPager.setAdapter(horizPageAdapter);
horizViewPager.setOnPageChangeListener(new OnPageChangeListener(){
@Override
public void onPageSelected(int position)
{
if(horizViewPager.getCurrentItem() == 3){
addPage();
horizPageAdapter.notifyDataSetChanged();
}
}
@Override
public void onPageScrollStateChanged(int state) {}
@Override
public void onPageScrolled(int position, float arg1, int arg2) {}
});
}
public void addPage() {
Fragment myFragment = new VerticalViewPagerCreator();
this.horizfragments.add(myFragment);
}
VerticalViewPagerCreator class
VerticalViewPager verticalViewPager = null;
private PagerAdapter verticalPageAdapter = null;
private List<Fragment> verticalfragments = new ArrayList<Fragment>();
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
addVerticalItem("file:///android_asset/index2.html", "WebView 3");
addVerticalItem("file:///android_asset/index2.html", "WebView 3");
addVerticalItem("file:///android_asset/index2.html", "WebView 3");
verticalPageAdapter = new PagerAdapter(getChildFragmentManager(), verticalfragments);
verticalViewPager =(VerticalViewPager)getView().findViewById(R.id.verticalViewPager1);
verticalViewPager.setAdapter(verticalPageAdapter);
public void addVerticalItem(String url, String title) {
Fragment myFragment = new MyWebView();
Bundle args = new Bundle();
args.putString("url", url);
args.putString("type", "horizontal");
myFragment.setArguments(args);
this.verticalfragments.add(myFragment);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.vert_activity_main, container, false);
return view;
}
MyWebView class
public class MyWebView extends Fragment {
private WebView webView;
private String url;
private Bundle args;
@SuppressLint({ "SetJavaScriptEnabled", "NewApi" })
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// get the url to open
args = getArguments();
url = args.getString("url");
webView = (WebView) getView().findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.addJavascriptInterface(new WebAppInterface(webView.getContext()), "Android");
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
Toast.makeText(getActivity(), "ERROR code:"+errorCode+" desc: "+description+" failingURL: "+failingUrl, 3000).show();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
return true;
}
public void onPageFinished(WebView view, String url) {
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
}); //close the setWebViewClient
webView.loadUrl(url);
This is the error: