【问题标题】:Android Timer Task IssueAndroid 定时器任务问题
【发布时间】:2016-08-22 10:06:26
【问题描述】:

加载 ListView 时我需要一个计时器。喜欢“等待 [(Timer) 42] 秒购买元素”我想向用户显示 Textview 喜欢它。我不能在 ListView 中使用 Thread...

我从 runOnUiThread 得到错误。为什么 ?我不能在 Listview 中使用计时器。

 @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;
    }

【问题讨论】:

    标签: android android-layout listview timer android-runonuithread


    【解决方案1】:

    试试这个.. for call atfer 42 sec..

    (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...
    
        }
    };
    

    这是每隔一秒使用一次计时器......

    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
    
    
                    }
    
                });
    
    
            }
        };
    

    【讨论】:

    • 每 42 秒?还是只有一个?
    • 不不,我需要循环播放。我想每 42 秒循环一次。我怎样才能做到这一点 ?就像我想每 42 或 20 秒发布一次……我怎样才能循环它?
    • 哦好的..再次感谢您
    【解决方案2】:

    尝试使用CountDownTimer 它在 UI 线程中完美运行。您只需要像这样在您的代码中启动它:

    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();
    

    【讨论】:

    • 我去试试 谢谢
    【解决方案3】:

    尝试使用 CountDownTimer 代替计时器

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

    【讨论】:

    • 我去试试 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多