0

Loaded ListView のときにタイマーが必要です。のように「 [(Timer) 42] Seconds for buy elements 」のように、ユーザーに Textview を表示したい Like it. ListView で Thread を使用できません...

runOnUiThread からエラーが発生します。なんで ?リストビューでタイマーを使用できません。

 @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        final TextView LblTime;

        inflater=(LayoutInflater)Context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view=inflater.inflate(R.layout.test,parent,false);

        LblTime=(TextView)view.findViewById(R.id.LblFragmentAnaListViewKalanSure );

       Timer T=new Timer();
        T.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                Context.getApplicationContext().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        long Time= MyTime.get(position).getTime() - (new Date()).getTime();
                        long Sec= Time/ 1000 % 60;
                        long Min= Time/ (60 * 1000) % 60;
   LblTime.setText(Min+":"+Sec);
                    }
                });
            }
        }, 1000, 1000);
        return view;
    }
4

3 に答える 3

2

これを試してください.. 42 秒後に呼び出します..

(new Handler()).postDelayed(new Runnable() {

    public void run() {
        // do you want
     }
 }, 42000);

毎秒必要な場合は、それを行うより..

これはハンドラーを使用しています

初期化..

Handler handler = new Handler();

輸入

import android.os.Handler;

これを呼び出す..

 handler.postDelayed(yourtask,42*1000);



 private Runnable yourtask = new Runnable() {
    public void run() {

      // Run your code..
        handler.removeCallbacks(yourtask);
        handler.postDelayed(yourtask, 42*1000); // again start...

    }
};

これは1秒ごとにタイマーを使用しています....

final Handler handler = new Handler();
Timer timer = new Timer();
private int DELAY = 1000 * 60 * 1;

これを呼び出す

   timer.scheduleAtFixedRate(doAsynchronousTask, 0, DELAY);

クラスで

  TimerTask doAsynchronousTask = new TimerTask() {
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {
             // your code


                }

            });


        }
    };
于 2016-08-22T10:33:25.250 に答える
1

Try to use CountDownTimer it works perfectly in UI thread. All you need is just to initiate it in your code like that:

timer = new CountDownTimer(MS_TILL_COMPLETE, TICK_OFFSET) {
        @Override
        public void onTick(long l) {
            //Repeating every TICK_OFFSET
        }

        @Override
        public void onFinish() {
            //Called after MS_TILL_COMPLETE
        }
    }.start();
于 2016-08-22T10:14:42.910 に答える
1

タイマーの代わりに CountDownTimer を使用してみてください

new CountDownTimer(10000, 20000) {
        @Override
        public void onTick(long millisUntilFinished) {}

        public void onFinish() {
        }
    }.start();
于 2016-08-22T10:15:55.333 に答える