viewpager中的倒计时器无法正常工作

时间:2017-06-28 22:37:24

标签: android android-fragments timer android-viewpager

我创建了一个简单的viewpager和片段,可以为每个视图创建几个textview和倒数计时器。这是我的viewpager适配器。

我在寻呼机中用我的索引调用一个函数(populateView),并根据它填充内容。

我遇到的问题是,当我的cmpDetails有3个视图,并且每个视图都有自己的计时器时,在第一个视图中单击计时器会在其他视图中随机设置计时器...所以如果我向右滑动到其他位置,我看到计时器倒计时,即使我没有点击那个特定的计时器。例如,View 1计时器启动视图3计时器。

有人可以帮我弄清楚我错过了什么吗?感谢

public class CustomPagerAdapter extends PagerAdapter {
    private ArrayList<HashMap<String, String>> cmpDetails;
    TextView timer;
    TextView nextName;
    TextView eName;
    TextView cmpTitle;
    CountDownTimer ct;
    boolean coutndownIsRunning = false;
    private ViewGroup groupLayout;


        private Context mContext;
        public CustomPagerAdapter(Context context, ArrayList<HashMap<String, String>> cmpDetails) {
    this.cmpDetails=cmpDetails;
    mContext = context;
}

@Override
public Object instantiateItem(ViewGroup collection, int position) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.cmp_child_item, collection, false);

    cmpTitle = (TextView) layout.findViewById(R.id.cmp_title);
    eName = (TextView) layout.findViewById(R.id.ename);
    nextName = (TextView) layout.findViewById(R.id.next);
    timer = (TextView) layout.findViewById(R.id.timer);

    textView6 = (TextView) layout.findViewById(R.id.textView6);
    textView7 = (TextView) layout.findViewById(R.id.textView7);
    secs = (TextView) layout.findViewById(R.id.secs);

    if (ct != null)  {
        ct.cancel();
    }

    groupLayout = layout;
    PopulateView(position);
    collection.addView(layout);

    return layout;
}

@Override
public void destroyItem(ViewGroup collection, int position, Object view) {
    collection.removeView((View) view);
    if (ct != null)  {
        ct.cancel();
    }

}

@Override
public int getCount() {
    return cmpDetails.size();
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == object;
}

@Override
public CharSequence getPageTitle(int position) {
    return cmpDetails.get(position).get("name");
}

public void PopulateView(final int index) {
    timer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (ct != null && coutndownIsRunning)  {
                ct.cancel();
            }
            ct = new CountDownTimer(Integer.parseInt(cmpDetails.get(index).get("time"))*1000, 1000) {

                public void onTick(long millisUntilFinished) {
                    coutndownIsRunning = true;
                    timer.setText("" + millisUntilFinished / 1000);
                }

                public void onFinish() {
                    coutndownIsRunning = false;
                    timer.setOnClickListener(null);
                    ct.cancel();
                    timer.setText("Done!");
                    if (Integer.parseInt(cmpDetails.get(index).get("time")) > 0) {
                    }
                }
            };
            ct.start();
        }
    });

}

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为您正在为所有视图使用Timer的单个实例。尝试分别为每个视图使用不同的实例。总共3个实例。每个视图比你有1个计时器。

希望它有所帮助。