2016-11-18 6 views
0

タイトルが要求と一致しない場合は申し訳ありませんが、その時点で最高のものが出てくる可能性があります。ArrayList内の2つのオブジェクトの時間差を計算する方法

私はパラメータとしてオブジェクトを取るArrayListを持っています。

private List<Movement> walked = new ArrayList<>(); 

注:運動は、私は2時間の文字列の間の時間差を計算し、それは素晴らしい作品メソッドを持つクラス の名前です。

私のジレンマは、ボタンをクリックすると、オブジェクトがArrayListに追加されるということです。私は、この新しいクリックと次のクリックとの間の時間間隔を記録する両方の動作の時間として知りたい。

私はクリック数に基づいて、私は、リスト内のオブジェクトを取得することができ、それぞれの時間を取得し、時間を計算したい私のonClickListener

Movement move = new move(); 
move.setTime("current time"); 
walked.add(move); 

にこのようなものをやっていますそれぞれの違いをクリックして、それを出力します。

時間計算を行うための私の機能はうまくいきます。私はちょうど正しく反復することができません。これはiveが試みたものです。

for(Movement x:walked){ 
    Toast(TimeCal.getDuration(x.getTime(), "i'm to put the previous object time here") + " min(s)"); 
} 

助けてください。

+1

'(I = 1をint型、iが(walked.sizeを<); iが++){ため 運動電流= walked.get(I)。 移動prev = walked.get(i-1); Toast(TimeCal.getDuration(current.getTime()、prev.getTime())+ "min(s)") } ' – Shark

+1

ボタンをクリックするだけです。クリックするたびに、前回クリックしてから時間がかかりましたか?このような場合は、統計情報などの履歴やクリックが必要ですか、最後のクリックを使用して破棄することはできますか? – palako

+0

まさに@palako、私は本当にクリック統計を必要としません。時差は最も重要なことです。ありがとう –

答えて

0

現在のクリックを前のクリックと1つのループで比較するには、foreachではなく、forループを使用してください。これらの線に沿って何か:

if(walked.size() > 0) 
for(int i = 1; i < walked.size(); i++) { 
    Movement current = walked.get(i); 
    Movement prev = walked.get(i-1); 
    Toast(TimeCal.getDuration(current.getTime(), prev.getTime()) + " min(s)") 
} 
0

あなたの質問に対する私のコメントに対するあなたの回答に基づいて、ArrayListを忘れて、最新のクリックへの参照が必要です。

あなたのonClickListenerでMovementムーブを作成しています。これをローカル変数ではなくオブジェクト属性として保存し、次のクリックを取得したら、onClickListenerでその変数が設定されているかどうかを確認するコードを追加します。そうであれば、オブジェクト属性に保存したムーブメントと今取得したムーブメントとの時間差をしてください。

+0

ああスナップ、申し訳ありません@palako、私は、私はarraylist –

+0

を後で使用するために保存するか、同じことをやっている理由を後ですべてのクリック(時間)を保存する必要があることを言及することを忘れていた私はあなたに言ったが、配列をグローバルに保ち、比較のために最後の要素にアクセスする。 – palako

関連する問題