【问题标题】:Working with SwipeRefreshLayout and WebView inside ViewPager在 ViewPager 中使用 SwipeRefreshLayout 和 WebView
【发布时间】:2014-05-25 19:00:12
【问题描述】:

我在我的应用程序中使用SwipeRefreshLayoutWebView 没有问题。

ViewPager 代码内:

@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;
}

无论我是否定义SwipeRefreshLayout,都会发生错误。

这是错误。如您所见,它与我的代码无关,但我不知道如何解决这个问题

日志:

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

【问题讨论】:

    标签: android android-viewpager android-support-library swiperefreshlayout


    【解决方案1】:

    SwipeRefreshLayout.java 的第 441 行是

        mListener.onRefresh();
    

    provide an OnRefreshListener 了吗?

    【讨论】:

    • 我做到了。即使我没有,我也不会崩溃。
    【解决方案2】:

    转到项目->Properties->Java Buildpath 并添加支持 library V4 并从 order 和 Export 检查库 选项卡,确保勾选标记。

    【讨论】:

    • 正如我所写,滑动在我的应用程序中的其他片段上运行良好
    【解决方案3】:

    这可能是因为您在 ViewPager 中有 SwipeRefreshLayout,即在 view_pager_item.xml 中。所以当SwipeRefreshLayout查找其上下文时,它会找到包含ViewPager的Activity或Fragment。

    尝试将SwipeRefreshLayout 移动到包含 ViewPager 的 Activity 或 Fragment 中,看看效果如何。

    【讨论】:

      【解决方案4】:

      您是否已为 SwipeRefreshLayout 视图设置了监听器?

      例如,如果你的 Fragment/Activity 实现了SwipeRefreshLayout.OnRefreshListener,则需要将 SwipeRefreshLayout 实例设置为:

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

      这应该可以修复崩溃:)

      【讨论】:

        猜你喜欢
        • 2015-12-30
        • 1970-01-01
        • 1970-01-01
        • 2015-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-22
        相关资源
        最近更新 更多