1

所以我在来自 CountDownTimer 的自定义列表视图适配器中具有此功能,但不知何故我无法将文本更新到 UI。请帮帮我

private Handler mHandler = new Handler();
    private Runnable updateRemainingTimeRunnable = new Runnable() {
        @Override
        public void run() {
                long waktu = millisUntilFinished;
                updateTimeRemaining(waktu);
        }
    };



    private void startUpdateTimer() {
        Timer tmr = new Timer();
        tmr.schedule(new TimerTask() {
            @Override
            public void run() {
                mHandler.post(updateRemainingTimeRunnable);
            }
        }, 1000, 1000);
    }



    public void updateTimeRemaining(long currentTime) {
        millisUntilFinished = (int) currentTime - 1000;
        if (millisUntilFinished > 0) {
            tempminute = (int) Math.floor((millisUntilFinished/1000)/60);
            minutes = tempminute%60;
            seconds = (millisUntilFinished/1000)%60;
            hours = tempminute/60;

            Log.i("myarc","00 day " + hours + " hr " + minutes + " min " + seconds + " sec");

            context.runOnUiThread(new Runnable() {
                public void run() {
                    vouchercountdown.setText("00 day " + hours + " hr " + minutes + " min " + seconds + " sec");
                }
            });
            //vouchercountdown.setText("00 day " + hours + " hr " + minutes + " min " + seconds + " sec");
        } else {
            context.runOnUiThread(new Runnable() {
                public void run() {
                    vouchercountdown.setText("00 day 00 hr 00 min 00 sec");
                }
            });
            //vouchercountdown.setText("00 day 00 hr 00 min 00 sec");
        }
    }

但是当我第一次像这样从 getView 调用它时,文本发生了变化。

public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View listViewItem = inflater.inflate(R.layout.list_layout_voucher, null, true);

        ImageView imagevoucher = (ImageView) listViewItem.findViewById(R.id.ImageVoucher);
        vouchercountdown = (TextView) listViewItem.findViewById(R.id.CountdownText);
        final TextView soldcounter = (TextView) listViewItem.findViewById(R.id.SoldCount);
        TextView buybutton = (TextView) listViewItem.findViewById(R.id.BuyText);

        buybutton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                countersold[position] += 1;
                soldcounter.setText("Sold \n " + String.valueOf(countersold[position]));
            }
        });

        updateTimeRemaining(Integer.valueOf(timeinseconds[position]));


        soldcounter.setText("Sold \n " + String.valueOf(countersold[position]));
        imagevoucher.setImageResource(imageid[position]);
        return  listViewItem;
    }

那么为什么 textView 不能从我的 startUpdateTimer 代码循环中更改文本?

谢谢。

4

1 回答 1

0

如果 UI 没有更新,我会像下面这样重新格式化线程,试试这样

    new Thread(new Runnable() {
        @Override
        public void run() {         
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {                       
                       long waktu = millisUntilFinished;
                       updateTimeRemaining(waktu);
                       // OR textView.setText codes here
                    }
                });  
        }
    }).start();
于 2016-04-18T10:25:58.773 回答