Je suis nouveau dans Viewpager, et après avoir lu http://developer.Android.com/reference/Android/support/v4/view/ViewPager.html de Google, je ne trouve rien qui se rapporte viewPager.setOnItemClickListener(new OnItemClickListener() {
Avons-nous d'autres options pour agir en tant qu'élément cliqué?
Tester
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);
}
});
Erreur: La méthode setOnItemClickListener (new AdapterView.OnItemClickListener () {}) n'est pas définie pour le type ViewPager.
Il n'y a pas de méthode de rappel OnItemClick pour ViewPager. Si vous souhaitez cliquer sur des événements sur chaque page, vous devrez intégrer votre auditeur au contenu de la page dans votre adaptateur.
quelque chose comme ça:
@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;
}
exactement ce dont vous avez besoin dépendra un peu de ce que vous faites dans la fonction instantiateItem()
que vous n'avez pas encore publiée, je ne peux donc pas vous donner de réponse plus précise.
J'ai implémenté la personnalisation 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;
}
}
}
Et du code pour implémenter onItemClickListener
ClickableViewPager viewPager = (ClickableViewPager) findViewById(R.id.viewPager);
viewPager.setOnItemClickListener(new ClickableViewPager.OnItemClickListener() {
@Override
public void onItemClick(int position) {
// your code
}
});
Je ne suis pas sûr de ce à quoi vous vous attendriez de vous répondre avec l'auditeur ci-dessus.
Il existe un setOnClickListener(View.OnClickListener l)
que vous pouvez utiliser pour détecter un contact avec le viewPager.
Vous pouvez également utiliser onPageScrolled
pour obtenir les entrées de l'utilisateur, et onPageSelected
et onTabSelected
.
@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);
}
}
}
dans votre activité vous pouvez remplacer:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mDownX = ev.getX();
mDownY = ev.getY();
break;
case MotionEvent.ACTION_UP:
mDownX -= ev.getX();
mDownY -= ev.getY();
if(mDownX==0 && mDownY==0)
{
your action if click
}
break;
}
return super.dispatchTouchEvent(ev);
}