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

ハリーはどんな種類のエラーが発生しますか? 私はそれを実装しましたが、完全に機能します。しかし、要素の位置を保存する代わりに、モデル プロパティを持つビュー ホルダーを保存しています。convertview が null でないかどうかを確認する必要があることに注意してください。コードを見てください:

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

ビューの行の位置を取得するには、この関数で listview の 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 に答える