2012-07-21 71 views
0

我想实现两页之间的滑动。第一页是一个ListFragment,并带有一些项目。我希望能够扫描单个项目并切换到另一个Activity来处理该ListItem。ViewPager中的ListView - 如何获取物品位置?

我已经使用ViewPager实现了Activity切换 - 这似乎是处理这种情况的最合理的方法。然而,我不知道如何切换到另一个屏幕时从ListFragment中获取滑动的项目。

我知道有onListItemClick(),但不知道它是否允许在刷卡后获取物品索引。根据我发现的 - 它没有。

任何想法?

回答

0

我已经成功地做到这一点使用下面的重载ViewPager类:

import android.R; 
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.View; 
import android.widget.ListView; 
import org.ftang.model.Program; 

public class TouchingViewPager extends ViewPager { 

    private GestureDetector gestureScanner; 

    public TouchingViewPager(Context context) { 
     super(context); 
     gestureScanner = new GestureDetector(simpleOnGestureListener); 
    } 

    public TouchingViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     gestureScanner = new GestureDetector(simpleOnGestureListener); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     int currentItem = getCurrentItem(); 
     gestureScanner.onTouchEvent(ev); 
     return super.onTouchEvent(ev); 
    } 

    GestureDetector.SimpleOnGestureListener simpleOnGestureListener = new GestureDetector.SimpleOnGestureListener() { 

     public boolean onDown(Math event) { 
      return true; 
     } 

     public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { 
      Log.d(null,"Fling"); 
      int MAJOR_MOVE = 120; 
      if (event1 == null) event1 = MotionEvent.obtain(0, 0, 0, 0, 0, 0); 
      int dx = (int) (event2.getX() - event1.getX()); 
      // don't accept the fling if it's too short 
      // as it may conflict with a button push 
      if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.abs(velocityY)) { 
       if (velocityX > 0) { 
        // nothing 
       } else { 
        ListView liveView = (ListView) findViewById(R.id.list); 
        Program program = (Program) liveView.getAdapter() 
          .getItem(liveView.pointToPosition((int)event1.getX(), (int)event1.getY())); 
        program.getName(); 
       } 
       return true; 
      } else { 
       return false; 
      } 
     } 

    }; 
} 

请注意,我在的onTouchEvent再次呼吁gestureScanner。我想我可以以某种方式连线自定义的getsutureScanner,以便处理所有的触摸事件。然而,由于我不熟悉如何处理ViewPager事件,我决定并排调用我自己的处理程序。

如果有更好的方法来做到这一点 - 请让我知道。

相关问题