我创建了一个简单的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();
}
});
}
答案 0 :(得分:1)
这种情况正在发生,因为您正在为所有视图使用Timer
的单个实例。尝试分别为每个视图使用不同的实例。总共3个实例。每个视图比你有1个计时器。
希望它有所帮助。