1

カウントダウンタイマーを使用してリストビューを作成しました。結果は最初は良好ですが、リストをスクロールするとシャッフルされ、結果が間違っています。

アダプタ クラス:

public class EventsListAdapter extends BaseAdapter {

    LayoutInflater inflater;
    Activity context;

    List<MyEvents> list;

    long startTime = 0L;
    long countUp;
    String hrs = "00";
    String mins = "00";
    String secs = "00";
    private MyCustomTimer myTimer;
    public EventsListAdapter(Activity context, List<MyEvents> list) {
        this.context = context;
        inflater = context.getLayoutInflater();
        this.list = list;
    }

    public void setActivityList(List<MyEvents> LoadList) {
        list = LoadList;
    }

    public int getCount() {
        return list.size();
    }

    public Object getItem(int position) {
        return list.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    static class ViewHolder {
        TextView name;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        MyEvents eventsData = list.get(position);   

        View rowView = convertView;
        ViewHolder viewHolder;
        if (rowView == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            rowView = inflater.inflate(R.layout.likes_inflate, null);
            viewHolder = new ViewHolder();
            viewHolder.name = (TextView) rowView.findViewById(R.id.lblName);
            if (eventsData.isStarted()){
                myTimer = new MyCustomTimer(viewHolder.name);
                myTimer.setTimer(eventsData.start_date);
            }
            rowView.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder) rowView.getTag();
        }

        return rowView;
    }
}

CountDownTimer クラス:

class MyCustomTimer{
        TextView tv;
        public MyCustomTimer(TextView tv) {
            this.tv = tv;
        }

        void setTimer(final long time) {
            new CountDownTimer(time, 1000) {
                public void onTick(long millisUntilFinished) {
                    //Set formatted date to your TextView                   
                    tv.setText(Utilities.getDurationBreakdown(millisUntilFinished));

                }
                public void onFinish() {
                    tv.setText("Done!");
                }
            }.start();
        }
    }

このコードに何か問題がありますか? 提案してください。

4

2 に答える 2

0

リスト ビューをスクロールするたびに、getView() が呼び出されます。というわけでカウンター再開。ハッシュマップのような変数でカウンターを維持します。getView() でこの変数を確認し、それに従ってカウンターの値を設定します。

于 2013-07-31T06:56:35.580 に答える