2016-12-26 8 views
3

私はカスタムlistviewを持っています。項目はスクロールです。私はlistviewの項目のための5秒のためのアイテムのシングルタッチとロングプレスを実行したい。これを行う方法。私はlistviewの項目の時間間隔を5秒に増やすには、どうすればlongpressを増やすことができますか?アンドロイド:アンドロイドのリストビュー項目の長押し時間を増やすにはどうすればいいですか?

答えて

1

setOnItemLongClickListener、その後、あなたはOnTouchListenerに触れビューを設定することができ、時間がACTION_DOWNACTION_UPの間に5秒以上であれば、あなたが計算できるので、あなたは、あなたが時間ACTION_DOWNと時間ACTION_UPを、記録することができますすることができます。

+1

、ユーザーは一般的に解放し、その後 '1.2.3.4.5'はカウントされません。 – Enzokie

1

遅延を変更することはできません。これはアンドロイドのフレームワークに組み込まれています。私も同じ問題日前に出会った。

setOnTouchListenerを手動で使用できます。

例:

private long then; 
private int longClickDur= 5000; //5 seconds 


//you can use any view you want 
ImageView imageView = (ImageView) findViewById(R.id.longclick_view); 
imageView.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      then = (long) System.currentTimeMillis(); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      if ((System.currentTimeMillis() - then) > longClickDuration) { 
      /* Long click behaviour will go here*/ 
      Toast.makeText(context, "yay, long click", Toast.LENGTH.SHORT); 
      return false; 
      } else { 
      /* LONG CLICK FAILED*/ 
      Toast.makeText(context, "TRY AGAIN", Toast.LENGTH.SHORT); 
      return false; 
      } 
     } 
     return true; 
     } 
    }); 
+0

私は同じことをしましたが、その場合、リストビューの水平スクロールは起こりません.... –

1

それが実行する前に、自分の指を持ち上げるために、ユーザーを待たないので、これは、より正確onLongPress複製します。 ViewPager専用に書かれていますが、同様のロジックを適用できるはずです。私たちは指を離す前に、我々は通常、ポップアップや変更を待つため、不自然ユースケースだろうIMO

// long press duration in milliseconds 
public static final int LONG_PRESS_DURATION = 2000; 

private boolean mIsTouching = false; 

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    if (event.getAction() == event.ACTION_DOWN) { 
     mIsTouching = true; 
    } else if (event.getAction() == event.ACTION_UP) { 
     mIsTouching = false; 
    } 

    return super.onTouchEvent(event); 
} 

@Override 
public void onLongPress(MotionEvent event) { 

    // subtracts the system set timeout since that time has already occured at this point 
    int duration = LONG_PRESS_DURATION - getLongPressTimeout(); 

    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      if (mIsTouching) { 
       do something... 
      } 
     } 
    }, duration > 0 ? duration : 0); 
} 
+0

'onLongPress(MotionEvent)'メソッドはどこですか?私は 'ViewPager'でそれを見つけることができません。 'View.OnLongClickListener'の' onLongClick(View view) 'を意味しますか? –

+0

ありがとうございます。あなたのソリューションからgetLongPressTimeout()を削除する必要がありましたが、私のために働きました。 – TomV

関連する問題