Jesus Dimrix
Jesus Dimrix

Reputation: 4578

Working with SwipeRefreshLayout and WebView inside ViewPager

I'm using SwipeRefreshLayout and WebView in my application with no problems.

Inside the ViewPager code:

@Override
public Object instantiateItem(View collection, int position) {

    currentArticle = newsList.get(position);

    View webViewContainer =  getActivity().getLayoutInflater().inflate(R.layout.view_pager_item, null);

    WebView webview = (WebView) webViewContainer.findViewById(R.id.webview);
    SetSettingForWebView(webview);
    webview.loadUrl(currentArticle.getArticleURL());
    SwipeRefreshLayout swipe = (SwipeRefreshLayout) webViewContainer.findViewById(R.id.swipe_container);
    setSettingForSwipeLayout(swipe);
    ((ViewPager) collection).addView(webViewContainer, 0);

    return webViewContainer;
}

The error occurs regardless whether I define the SwipeRefreshLayout or not.

This is the error. As you can see it's not related to my code but I don't know how to solved this one

LOG:

05-25 21:55:59.804: E/AndroidRuntime(4665): FATAL EXCEPTION: main
05-25 21:55:59.804: E/AndroidRuntime(4665): Process: com.dimrix.test, PID: 4665
05-25 21:55:59.804: E/AndroidRuntime(4665): java.lang.NullPointerException
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.support.v4.widget.SwipeRefreshLayout.startRefresh(SwipeRefreshLayout.java:441)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.support.v4.widget.SwipeRefreshLayout.onTouchEvent(SwipeRefreshLayout.java:399)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.View.dispatchTouchEvent(View.java:7811)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2169)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1613)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.app.Activity.dispatchTouchEvent(Activity.java:2539)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.dispatchTouchEvent(ActionBarActivityDelegateICS.java:268)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2117)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.View.dispatchPointerEvent(View.java:8005)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4300)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4179)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3714)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3764)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3733)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3844)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3741)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3901)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3714)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3764)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3733)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3741)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3714)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5973)
05-25 21:55:59.804: E/AndroidRuntime(4665):     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.ja

Upvotes: 2

Views: 3062

Answers (4)

Francesco Florio
Francesco Florio

Reputation: 1195

Do you have set the SwipeRefreshLayout view with a listener ?

For example, if your Fragment/Activity implements SwipeRefreshLayout.OnRefreshListener, you need to set the SwipeRefreshLayout instance as:

SwipeRefreshLayout layout = (SwipeRefreshLayout)view.findViewById(R.id.swipe);
layout.setOnRefreshListener(this);

This should fix the crash :)

Upvotes: 0

leocadiotine
leocadiotine

Reputation: 3314

This may be happening because you have the SwipeRefreshLayout inside the ViewPager, i.e. in view_pager_item.xml. So when the SwipeRefreshLayout looks for its context, it will find the Activity or Fragment that contains the ViewPager.

Try moving the the SwipeRefreshLayout to the Activity or Fragment that contains the ViewPager and see how it goes.

Upvotes: 0

matiash
matiash

Reputation: 55350

Line 441 of SwipeRefreshLayout.java is

    mListener.onRefresh();

Did you provide an OnRefreshListener for it?

Upvotes: 1

Chandru
Chandru

Reputation: 5962

Go to project->Properties->Java Buildpath and add supporting library V4 and check the library from order and Export tab by ensuring the tick mark is ticked.

Upvotes: 0

Related Questions