5

我知道在此之前有人问过这类问题。我已经尝试过两个手势检测器:

 wholelistview.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                if (gestureDetector.onTouchEvent(event)) {
                    return true;
                }
                return false;
            }
        });

仅检测滑动(无法在此处获取行位置)。

同样在getview中:

public View getView(int position, View convertView, ViewGroup parent) {
//other stuff

convertview.setOnTouchListener(same as above);

} 

无法检测到滑动。

有什么解决办法吗???我只想要进行滑动的行位置。

4

4 回答 4

3

hanry 你得到什么样的错误?我已经实现了它并且它工作得很好。但是,我没有存储元素的位置,而是存储了视图持有者,其中包括其他也具有模型属性的视图持有者。请记住,您必须检查 convertview 是否不为空。看一下代码:

public View getView(int position, View convertView, ViewGroup parent) {
    View view = null;

    Model m = filter.subItems.get(position);
    if(m != null)
    {
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            view = inflator.inflate(R.layout.rowlayout, null);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.position = position; - here you can put your position.
            view.setOnTouchListener(this.listener);
            //assign whatever you like to the viewHolder - in most cases the model and inlated controls and then assign 
        } else {
            view = convertView;
        }
        view.setTag(viewHolder);
    }

接着

public boolean onTouch(View v, MotionEvent event) {
    ViewHolder viewHolder = ((ViewHolder) v.getTag());
}

跳,有帮助。ps:如果你对视图持有者和标签一无所知,我建议去那里看看。我的方法已在弗兰肯斯坦提供的链接中进行了描述。

于 2011-12-06T23:45:40.357 回答
1

你可以做 getTag 和 setTag 来了解视图的标签,并使用它你可以决定哪一行被刷了

public View getView(int position, View convertView, ViewGroup parent) { 
//other stuff 
     convertview.setTag(position);
}  

并从链接中滑动

 public boolean onTouch(View v, MotionEvent event) {
     int pos = (Integer)v.getTag();
     Log.i(TAG,pos+" is swiped");
 }

我没有实现这个..所以你必须测试错误..但据我所知,这可能是实现你想要做的事情的好方法。

于 2011-12-06T10:06:03.773 回答
1

要获取视图的行位置,请通过此函数获取 onTouch 为您的列表视图传递的视图位置

wholelistview.setOnTouchListener(new View.OnTouchListener() {         
 public boolean onTouch(View v, MotionEvent event) {                 
 if (gestureDetector.onTouchEvent(event)) {
    int position =  indexOfChild(View v);

     return true;                 
     }                 
     return false;             
                  }         }); 

它返回孩子的索引。 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.5_r1/android/view/ViewGroup.java#ViewGroup.indexOfChild%28android.view.View% 29

于 2011-12-05T09:52:47.223 回答
0
private int position = -1;
@Override
protected void onListItemClick(ListView l, View v, int index, long id) {
position = index;
}

像这样?

于 2011-12-05T09:32:04.537 回答