Android onClick未在我的viewpager中调用

Android onClick未在我的viewpager中调用,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我有一个viewpager,其中有几个片段。我需要处理click事件。我已经实现了onTouch事件,但它不是click事件的触发器。当我滑动onTouch触发时。我不知道为什么它不是click事件的触发器 这是我的viewpager课程 package com.android.ho; import com.sph.custom.ViewPagerWithTapGestreDetection; import android.os.Bundle; import android.supp

我有一个viewpager,其中有几个片段。我需要处理click事件。我已经实现了onTouch事件,但它不是click事件的触发器。当我滑动onTouch触发时。我不知道为什么它不是click事件的触发器

这是我的viewpager课程

    package com.android.ho;

import com.sph.custom.ViewPagerWithTapGestreDetection;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class PDFActivity extends FragmentActivity implements ImageOnTapCallback,OnPageChangeListener{
    static final int ITEMS = 20;
    MyAdapter mAdapter;
    //ViewPager mPager;
    ViewPagerWithTapGestreDetection mPager;
    //ViewPager mPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_pager);
        try {
            mAdapter = new MyAdapter(getSupportFragmentManager());
            mPager = (ViewPagerWithTapGestreDetection) findViewById(R.id.pager);
            mPager.setId(5000);
            mPager.setImageOnTapCallback(this); 
            mPager.setAdapter(mAdapter);
            //mPager.setOffscreenPageLimit(1);      
            mPager.setOnPageChangeListener(this);

            /*
            Button button = (Button) findViewById(R.id.first);
            button.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    mPager.setCurrentItem(0);
                }
            });
            button = (Button) findViewById(R.id.last);
            button.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    mPager.setCurrentItem(ITEMS - 1);
                }
            });
            */

            mPager.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    view.getParent().requestDisallowInterceptTouchEvent(true);
                    Log.e("Inside onTouch onTouch onTouch onTouch onTouch onTouch ", "onTouch");

                    return false;
                }
            });


        } catch (Exception e) {
            e.printStackTrace();
        }
    }

        public static class MyAdapter extends FragmentStatePagerAdapter {
        public MyAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);
        }


        @Override
        public int getCount() {
            return ITEMS;
        }

        @Override
        public Fragment getItem(int position) {


            switch (position) {
            case 0: // Fragment # 0 - This will show image
                return MyFragment.newInstance("1.pdf");
            case 1: // Fragment # 1 - This will show image
                return MyFragment.newInstance("2.pdf");
            case 2: // Fragment # 1 - This will show image
                return MyFragment.newInstance("3.pdf");
            case 3: // Fragment # 1 - This will show image
                return MyFragment.newInstance("4.pdf");
            case 4: // Fragment # 1 - This will show image
                return MyFragment.newInstance("5.pdf");
            default:// Fragment # 2-9 - Will show list
                return MyFragment.newInstance("1.pdf");
            }


        }
    }



    @Override
    public void tapDetected() {
        // TODO Auto-generated method stub
        Log.e("tapDetected", "tapDetected");
    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub
        Log.e("onPageScrollStateChanged", "onPageScrollStateChanged");
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub
        Log.e("onPageScrolled", "onPageScrolled");
    }

    @Override
    public void onPageSelected(int arg0) {
        // TODO Auto-generated method stub
        Log.e("onPageSelected", "onPageSelected");
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.e("onDestroy", "onDestroy onDestroy onDestroy");
    }




}
package com.android.ho

import java.util.Calendar;
import java.util.Currency;
import java.util.Date;

import com.sph.bh.ImageOnTapCallback;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.OnGestureListener;
import android.widget.Toast;

public class ViewPagerWithTapGestreDetection extends ViewPager {

    private ImageOnTapCallback imageOnTapCallback;
    private GestureDetector tapGestureDetector;
    private OnGestureListener mGestureListener;

    public ViewPagerWithTapGestreDetection(Context context) {

        super(context);
        try {
            imageOnTapCallback = null;// set if needed
            mGestureListener = new GestureListener();
            tapGestureDetector = new GestureDetector(getContext(), mGestureListener, null, true);
        } catch (Exception e) {

        }
    }

    public ViewPagerWithTapGestreDetection(Context context, AttributeSet attrs) {
        super(context, attrs);
        try {
            imageOnTapCallback = null;// set if needed
            mGestureListener = new GestureListener();
            tapGestureDetector = new GestureDetector(getContext(), mGestureListener, null, true);
        } catch (Exception e) {

        }
    }



     @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
                //Don't let any touches be passed down to the children automatically
         Log.d("onInterceptTouchEvent ", "onInterceptTouchEvent");
                return true;
         }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.d("onTouchEvent", "onTouchEvent");
        if (imageOnTapCallback != null) {
            tapGestureDetector.onTouchEvent(event);
        }

        return super.onTouchEvent(event);
    }

    public ImageOnTapCallback getImageOnTapCallback() {
        return imageOnTapCallback;
    }

    public void setImageOnTapCallback(ImageOnTapCallback imageOnTapCallback) {
        this.imageOnTapCallback = imageOnTapCallback;
    }

    public class GestureListener extends GestureDetector.SimpleOnGestureListener {





        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {

            Log.d("onSingleTapConfirmed", "onSingleTapConfirmed");

            if (null != imageOnTapCallback) {
                imageOnTapCallback.tapDetected();
            }

            return super.onSingleTapConfirmed(e);
        }

        @Override
        public boolean onDoubleTap(MotionEvent e) {
            Log.d("onDoubleTap", "onDoubleTap");
            return super.onDoubleTap(e);
        }

        @Override
        public void onLongPress(MotionEvent e) {
            Log.d("onLongPress", "onLongPress");
        }

        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            Log.d("onScroll", "onScroll");
            return super.onScroll(e1, e2, distanceX, distanceY);
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            Log.e("onFling ", "onFling");
            return super.onFling(e1, e2, velocityX, velocityY);
        }
    }
}
这是我的片段类

package com.android.ho;

import java.io.File;
import java.io.InputStream;

import com.epapyrus.plugpdf.core.viewer.ReaderView;

import android.content.Intent;
import android.content.res.AssetManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MyFragment extends Fragment{
    public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";
    public static int count = 1;

    static String file;
    TextView txt;
    ReaderView readerView;

    public static final MyFragment newInstance(String message) {
        MyFragment f = new MyFragment();
        Bundle bdl = new Bundle(1);
        bdl.putString(EXTRA_MESSAGE, message);
        f.setArguments(bdl);
        file = message;
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.myfragment_layout, container, false);
        try {

            File fl = new File(Environment.getExternalStorageDirectory(), "/pdf/2.pdf");
            readerView = (ReaderView) v.findViewById(R.id.pdfviews);
            //readerView.setOnClickListener(this);
            Log.e("readerView", fl.toString());

            v.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    view.getParent().requestDisallowInterceptTouchEvent(true);
                    Log.e("Inside onTouch onTouch onTouch onTouch onTouch onTouch ", "onTouch");

                    return true;
                }
            });


            // readerView.openFile("/mnt/sdcard/pdf/1.pdf","");
            if (count > 5)
                count = 1;
            readerView.openFile("/mnt/sdcard/pdf/" + count + ".pdf", "");
            Log.e("Inside onCreateView count is ", "" + count);
            count++;

            v.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    Toast.makeText(getActivity(), "Cilcked..",Toast.LENGTH_SHORT).show();

                }
            });

            /*v.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    view.getParent().requestDisallowInterceptTouchEvent(true);
                    Log.e("Inside onTouch onTouch onTouch onTouch onTouch onTouch ", "onTouch");

                    return false;
                }
            });*/

        } catch (Exception e) {
            e.printStackTrace();
        }
        return v;
    }


    @Override
    public void onDestroyView() {

        super.onDestroyView();
        // Log.d("PDFVIEW", "onDestroyView");

        try {
            if (readerView != null) {
                readerView.clear();
                // readerView.clearAllField(5);
                // readerView.destroyDrawingCache();
                // readerView.
                // readerView=null;
                // mPDFView.purgeMemory();
                // mPDFView.destroy();//added to force release memory
                // mPDFView = null;
            }
            Log.e("Fragment onDestroyView ", " onDestroyView readerView is "+readerView);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }



}
这是我的自定义viewpager类

    package com.android.ho;

import com.sph.custom.ViewPagerWithTapGestreDetection;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class PDFActivity extends FragmentActivity implements ImageOnTapCallback,OnPageChangeListener{
    static final int ITEMS = 20;
    MyAdapter mAdapter;
    //ViewPager mPager;
    ViewPagerWithTapGestreDetection mPager;
    //ViewPager mPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_pager);
        try {
            mAdapter = new MyAdapter(getSupportFragmentManager());
            mPager = (ViewPagerWithTapGestreDetection) findViewById(R.id.pager);
            mPager.setId(5000);
            mPager.setImageOnTapCallback(this); 
            mPager.setAdapter(mAdapter);
            //mPager.setOffscreenPageLimit(1);      
            mPager.setOnPageChangeListener(this);

            /*
            Button button = (Button) findViewById(R.id.first);
            button.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    mPager.setCurrentItem(0);
                }
            });
            button = (Button) findViewById(R.id.last);
            button.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    mPager.setCurrentItem(ITEMS - 1);
                }
            });
            */

            mPager.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    view.getParent().requestDisallowInterceptTouchEvent(true);
                    Log.e("Inside onTouch onTouch onTouch onTouch onTouch onTouch ", "onTouch");

                    return false;
                }
            });


        } catch (Exception e) {
            e.printStackTrace();
        }
    }

        public static class MyAdapter extends FragmentStatePagerAdapter {
        public MyAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);
        }


        @Override
        public int getCount() {
            return ITEMS;
        }

        @Override
        public Fragment getItem(int position) {


            switch (position) {
            case 0: // Fragment # 0 - This will show image
                return MyFragment.newInstance("1.pdf");
            case 1: // Fragment # 1 - This will show image
                return MyFragment.newInstance("2.pdf");
            case 2: // Fragment # 1 - This will show image
                return MyFragment.newInstance("3.pdf");
            case 3: // Fragment # 1 - This will show image
                return MyFragment.newInstance("4.pdf");
            case 4: // Fragment # 1 - This will show image
                return MyFragment.newInstance("5.pdf");
            default:// Fragment # 2-9 - Will show list
                return MyFragment.newInstance("1.pdf");
            }


        }
    }



    @Override
    public void tapDetected() {
        // TODO Auto-generated method stub
        Log.e("tapDetected", "tapDetected");
    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub
        Log.e("onPageScrollStateChanged", "onPageScrollStateChanged");
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub
        Log.e("onPageScrolled", "onPageScrolled");
    }

    @Override
    public void onPageSelected(int arg0) {
        // TODO Auto-generated method stub
        Log.e("onPageSelected", "onPageSelected");
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.e("onDestroy", "onDestroy onDestroy onDestroy");
    }




}
package com.android.ho

import java.util.Calendar;
import java.util.Currency;
import java.util.Date;

import com.sph.bh.ImageOnTapCallback;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.OnGestureListener;
import android.widget.Toast;

public class ViewPagerWithTapGestreDetection extends ViewPager {

    private ImageOnTapCallback imageOnTapCallback;
    private GestureDetector tapGestureDetector;
    private OnGestureListener mGestureListener;

    public ViewPagerWithTapGestreDetection(Context context) {

        super(context);
        try {
            imageOnTapCallback = null;// set if needed
            mGestureListener = new GestureListener();
            tapGestureDetector = new GestureDetector(getContext(), mGestureListener, null, true);
        } catch (Exception e) {

        }
    }

    public ViewPagerWithTapGestreDetection(Context context, AttributeSet attrs) {
        super(context, attrs);
        try {
            imageOnTapCallback = null;// set if needed
            mGestureListener = new GestureListener();
            tapGestureDetector = new GestureDetector(getContext(), mGestureListener, null, true);
        } catch (Exception e) {

        }
    }



     @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
                //Don't let any touches be passed down to the children automatically
         Log.d("onInterceptTouchEvent ", "onInterceptTouchEvent");
                return true;
         }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.d("onTouchEvent", "onTouchEvent");
        if (imageOnTapCallback != null) {
            tapGestureDetector.onTouchEvent(event);
        }

        return super.onTouchEvent(event);
    }

    public ImageOnTapCallback getImageOnTapCallback() {
        return imageOnTapCallback;
    }

    public void setImageOnTapCallback(ImageOnTapCallback imageOnTapCallback) {
        this.imageOnTapCallback = imageOnTapCallback;
    }

    public class GestureListener extends GestureDetector.SimpleOnGestureListener {





        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {

            Log.d("onSingleTapConfirmed", "onSingleTapConfirmed");

            if (null != imageOnTapCallback) {
                imageOnTapCallback.tapDetected();
            }

            return super.onSingleTapConfirmed(e);
        }

        @Override
        public boolean onDoubleTap(MotionEvent e) {
            Log.d("onDoubleTap", "onDoubleTap");
            return super.onDoubleTap(e);
        }

        @Override
        public void onLongPress(MotionEvent e) {
            Log.d("onLongPress", "onLongPress");
        }

        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            Log.d("onScroll", "onScroll");
            return super.onScroll(e1, e2, distanceX, distanceY);
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            Log.e("onFling ", "onFling");
            return super.onFling(e1, e2, velocityX, velocityY);
        }
    }
}

现在,当我在ViewPagerWithTapGesterDetection类中单击由onInterceptTouchEvent标识的它时。因此,我需要在单击时查看一个水平滚动条。在onInterceptTouchEvent中调用它是否正确?

是否可以添加一些代码?当触发onTouch with down操作时,可能会返回true。然后,onclick将不会被激活触发。尝试实现click listener到片段父布局。我如上所述更改代码。现在它总是从onInterceptTouchEvent mthod返回true。现在在onInterceptTouchEvent mthod之后,它在主类和片段中运行onTouchEvent。它还运行在SingleTapConfiged和tapDetected方法上。为什么它运行所有这些方法?