ViewPager OnItemClickListener

KC *_*hai 32 android android-viewpager

我是Viewpager的新手,在从谷歌阅读http://developer.android.com/reference/android/support/v4/view/ViewPager.html之后,我似乎无法找到任何相关内容viewPager.setOnItemClickListener(new OnItemClickListener() {.我们还有其他吗?作为项目单击的选项?

测试出来

viewPager.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Intent i = new Intent(MainActivity.this, SingleItemView.class);
                i.putExtra("flag", flag);
                i.putExtra("position", position);
                startActivity(i);
            }

        });
Run Code Online (Sandbox Code Playgroud)

错误:方法setOnItemClickListener(new AdapterView.OnItemClickListener(){})未定义类型ViewPager

Foa*_*Guy 79

ViewPager没有OnItemClick回调方法.如果您希望在每个页面上单击事件,则必须将侦听器构建到适配器中的页面内容中.

这样的事情:

@Override
public Object instantiateItem(View collection, final int pos) { //have to make final so we can see it inside of onClick()
    LayoutInflater inflater = (LayoutInflater) collection.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


    View page = inflater.inflate(R.layout.YOUR_PAGE, null);

    page.setOnClickListener(new OnClickListener(){
        public void onClick(View v){
            //this will log the page number that was click
            Log.i("TAG", "This page was clicked: " + pos);
        }
    });


    ((ViewPager) collection).addView(page, 0);
    return page;
}
Run Code Online (Sandbox Code Playgroud)

你需要什么将取决于instantiateItem()你还没有发布的其他内容,所以我不能给你一个更具体的答案.

  • 你引导我朝着正确的方向前进.我在`View`上放了`onClickListener`,它在Fragment的`onCreateView()`中返回. (3认同)

Vol*_*kiv 36

我实现了自定义ViewPager:

public class ClickableViewPager extends ViewPager {

    private OnItemClickListener mOnItemClickListener;

    public ClickableViewPager(Context context) {
        super(context);
        setup();
    }

    public ClickableViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        setup();
    }

    private void setup() {
        final GestureDetector tapGestureDetector = new    GestureDetector(getContext(), new TapGestureListener());

        setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                tapGestureDetector.onTouchEvent(event);
                return false;
            }
        });
    }

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        mOnItemClickListener = onItemClickListener;
    }

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

    private class TapGestureListener extends GestureDetector.SimpleOnGestureListener {

        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            if(mOnItemClickListener != null) {
                mOnItemClickListener.onItemClick(getCurrentItem());
            }
            return true;
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

和代码实现 onItemClickListener

ClickableViewPager viewPager = (ClickableViewPager) findViewById(R.id.viewPager);
viewPager.setOnItemClickListener(new ClickableViewPager.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                // your code
            }
        });
Run Code Online (Sandbox Code Playgroud)