2013-05-03 12 views
25

私はViewPageを初めて使い、http://developer.android.com/reference/android/support/v4/view/ViewPager.htmlをGoogleから読んだところ、関連するものは見つけられませんでしたviewPager.setOnItemClickListener(new OnItemClickListener() {クリックしたアイテムとして機能する他のオプションはありますか?ViewPager 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); 
      } 

     }); 

エラー: 方法setOnItemClickListener(新しいAdapterView.OnItemClickListener(){})型ViewPager

+0

を実装するために

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

とコードはhttp://www.gadgetsaint.com/android/create-を参照してください。 viewpager-tabs-android /#。WPuppVN97BI – ASP

答えて

63

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

まさにあなたはので、私はあなたに、より具体的な答えを与えることができない他に何あなたが投稿していないinstantiateItem()の内部で行っているのビットを依存します必要なもの。

+0

私たちはOnClickからポジションを獲得できますか? –

+0

@DroidBeginnerあなたがx/yを意味する位置であれば、onClickではなくOnTouchListener()を使用し、onTouch()メソッドに渡されるMotionEventからx/yを取得する必要があります。ユーザーがどのページにいるかのような位置を指定する場合は、渡されている 'int pos'パラメータを使用してitemをインスタンス化してください。後者を含めるように私の答えを編集します。 – FoamyGuy

+2

あなたは正しい方向に私を導いてくれました。私はフラグメントの 'onCreateView()'で返されていた 'View'に' onClickListener'を入れました。 – Sufian

1

私は上記のリスナーにあなたがどのような返答を期待しているのか分かりません。

setOnClickListener(View.OnClickListener l)があり、これを使用してviewPagerへの接触を検出できます。

onPageScrolledを使用してユーザー入力を取得し、onPageSelectedonTabSelectedを取得することもできます。

@Override 
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
} 

@Override 
public void onPageSelected(int position) { 
    mActionBar.setSelectedNavigationItem(position); 
} 

@Override 
public void onPageScrollStateChanged(int state) { 
} 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    Object tag = tab.getTag(); 
    for (int i=0; i<mTabs.size(); i++) { 
     if (mTabs.get(i) == tag) { 
      mViewPager.setCurrentItem(i); 
     } 
    } 
} 
+0

あなたはどこにonPageSelectedを入れますか?ビューページャのアダプタまたはメインクラスでは? –

+0

あなたはそれをアダプタで行います(したがって、あなたは何をしたいのであれ、そのメソッドのデフォルトバージョンをオーバーライドしています) – HalR

+0

これらのリスナーは現在のページのクリックを検出する機能を提供しません – JamisonMan111

23

私はカスタムViewPager実装:タブで設定viewpagerにonItemClickListener

ClickableViewPager viewPager = (ClickableViewPager) findViewById(R.id.viewPager); 
viewPager.setOnItemClickListener(new ClickableViewPager.OnItemClickListener() { 
      @Override 
      public void onItemClick(int position) { 
       // your code 
      } 
     }); 
+0

それは私のために働いた。ありがとう:) – Aakanksha

+0

@Aankanksha問題はありません) –

+0

タッチイベントは私のビューのページャーに電話していません。 – james