当前位置: 首页 > 面试题库 >

Android:ListView中有多个同时倒数计时器

廖臻
2023-03-14
问题内容

我正在创建一个需要ListView的应用程序,其中的元素数量不确定,每个元素都有一个从可变数量开始倒数的计时器。我能够成功地使 其中
之一倒计时,但是我不知道如何在ListView的每个元素中包括一个计时器。

我目前正在使用CountDownTimer(如果从网站复制,请确保将D大写,因为它们有误)。

任何向我指出正确方向的代码或资源都将受到赞赏。

这是我当前的EventAdapter类,它设置在每个ListView元素的TextView中显示的文本。我需要做的是使TextView每秒钟倒数一次。由于ListView的每个元素都显示不同的内容,因此我想我需要一种区分每个元素的方法。

我可以每秒更新一次整个列表,但是我还没有包括其他元素,例如从Internet加载的图像,每秒刷新一次是不切实际的。

private class EventAdapter extends ArrayAdapter<Event>
{
    private ArrayList<Event> items;

    public EventAdapter(Context context, int textViewResourceId, ArrayList<Event> items) {
        super(context, textViewResourceId, items);
        this.items = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.row, null);
        }

        Event e = items.get(position);

        if (e != null) {
            TextView tv = (TextView) v.findViewById(R.id.text);

            if (tv != null)
                tv.setText(e.getName());
        }
        return v;
    }
}

问题答案:

请在这里查看我的博客,您将在其中找到有关如何实现此目标的示例。

一种解决方案是将代表每个计数器的TextView及其在列表中的位置作为键放入HashMap中。

在getView()中

TextView counter = (TextView) v.findViewById(R.id.myTextViewTwo);
if (counter != null) {
    counter.setText(myData.getCountAsString());
    // add the TextView for the counter to the HashMap.
    mCounterList.put(position, counter);
}

然后,您可以使用处理程序以及在其中发布可运行程序的位置来更新计数器。

private final Runnable mRunnable = new Runnable() {
    public void run() {
        MyData myData;
        TextView textView;

        // if counters are active
        if (mCountersActive) {                
            if (mCounterList != null && mDataList != null) {
                for (int i=0; i < mDataList.size(); i++) {
                    myData = mDataList.get(i);
                    textView = mCounterList.get(i);
                    if (textView != null) {
                        if (myData.getCount() >= 0) {
                            textView.setText(myData.getCountAsString());
                            myData.reduceCount();
                        }
                    }
                }
            }
            // update every second
            mHandler.postDelayed(this, 1000);
        }
    }
};


 类似资料:
  • 首先,我使用Jalali/波斯日期和倒计时jQuery插件对我不起作用。对于ex,插件必须输入公历日期,如2017/5/2,但波斯/贾拉利日期是1396/2/17。 我有多个datetime,指定了天、小时、分钟和秒。例: 3天13小时4分25秒 23天2小时41分3秒... 我有几天、几小时、几分钟和几秒时间, 我想在一页上为他们的日期倒计时(他们的日期是白天的) 当页面中只有一个日期时,我使用

  • 本文向大家介绍多个js毫秒倒计时同时进行效果,包括了多个js毫秒倒计时同时进行效果的使用技巧和注意事项,需要的朋友参考一下 本文实例讲解js毫秒倒计时同时进行效果的代码,分享给大家供大家参考,具体内容如下 实现功能:调用一个函数,传入html元素的id,和一个截止时间(unix时间戳),在该html元素中打印出到当前到截止时间为止的倒计时,精确到毫秒; 效果图如下: 如何使用这个函数? addTi

  • 问题内容: 我已经在JavaScript中看到了许多倒数计时器,并希望在React中使用它。 我借用了我在网上找到的此功能: 然后我自己写了这段代码 当前onclick会将其在屏幕上的时间设置为: 但不会将其减少到,然后等等等 我想我需要使用其他参数再次调用该函数。我该怎么做呢? 编辑:我忘了说,我想要功能,这样我就可以使用秒到分钟和秒 问题答案: 您必须每秒剩余几秒钟(每次调用间隔)。这是一个例

  • 问题内容: 我创建了一个计时器,该计时器在按下按钮时启动,上面是运行的代码。谁能帮我创建一个计数为30的计时器?现在,当我运行它时,在标签中设置文本“ 30”,但我希望它从0开始并一直计数到30。 问题答案: 每次您的计时器运行时,它都会执行从0到30的循环,因此仅在循环结束时才刷新UI。您需要将i保留为成员,并在每次这样调用该方法时对其进行更新: 当然,一旦达到i = 30,您就应该取消时间,否

  • 介绍 用于实时展示倒计时数值,支持毫秒精度。 引入 import { createApp } from 'vue'; import { CountDown } from 'vant'; const app = createApp(); app.use(CountDown); 代码演示 基础用法 time 属性表示倒计时总时长,单位为毫秒。 <van-count-down :time="time

  • CountDown 倒计时 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 通过timestamp参数设置倒计时间,单位为秒 <template> <u-count-down :timestamp="timestamp"></u-count-down> </template> <script> export de