0

我有一个显示 recyclerView 和 Native Admob 广告的活动。广告正在加载,一切正常,但是当有人点击广告时,应用程序崩溃了。此外,崩溃并非每次都发生,而是大约每 10 次发生 5 次。

这是日志:

                                                                      Process: aculix.com.rakshabandhan, PID: 16098
                                                                      java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                          at aculix.com.rakshabandhan.Fragments.OneFragment$2.onItemClick(OneFragment.java:133)
                                                                          at aculix.com.rakshabandhan.RecyclerItemClickListener.onInterceptTouchEvent(RecyclerItemClickListener.java:36)
                                                                          at android.support.v7.widget.RecyclerView.dispatchOnItemTouchIntercept(RecyclerView.java:2628)
                                                                          at android.support.v7.widget.RecyclerView.onInterceptTouchEvent(RecyclerView.java:2674)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2175)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:416)
                                                                          at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1808)
                                                                          at android.app.Activity.dispatchTouchEvent(Activity.java:3065)
                                                                          at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:71)
                                                                          at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:71)
                                                                          at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:378)
                                                                          at android.view.View.dispatchPointerEvent(View.java:10244)
                                                                          at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4444)
                                                                          at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4312)
                                                                          at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3859)
                                                                          at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3912)
                                                                          at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3878)
                                                                          at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4005)
                                                                          at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3886)
                                                                          at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4062)
                                                                          at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3859)
                                                                          at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3912)
                                                                          at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3878)
                                                                          at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3886)
                                                                          at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3859)
                                                                          at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6253)
                                                                          at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6227)
                                                                          at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6188)
                                                                          at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6356)
                                                                          at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
                                                                          at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
                                                                          at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
4

1 回答 1

0

我解决了这个问题。为了处理点击,我使用了另一个类,如下所示。

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;

public interface OnItemClickListener {
    public void onItemClick(View view, int position);
}

GestureDetector mGestureDetector;

public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
    mListener = listener;
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }
    });
}

@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
    View childView = view.findChildViewUnder(e.getX(), e.getY());
    if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
        mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
    }
    return false;
}

@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

}}

然后在片段中,我正在设置点击监听器,如下所示

  recyclerView.addOnItemTouchListener(
            new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() {
                @Override public void onItemClick(View view, final int position) {
                    // TODO Handle item click



                }
            })
    );

现在我正在处理适配器内的点击侦听器,如下所示,它工作正常。

 myViewHolder.rInfo.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    }
            });
于 2017-07-25T18:27:18.017 回答