gpt4 book ai didi

java - 适配器中的计时器无法正常工作

转载 作者:行者123 更新时间:2023-12-01 09:57:48 25 4
gpt4 key购买 nike

 public class ItemMemberAdapter extends BaseAdapter{

ArrayList<Item> objects;
Context context;
Item itm;
MyHolder holder;
//timer
long starttime = 0L;
long timeInMilliseconds = 0L;
long timeSwapBuff = 0L;
long updatedtime = 0L;
int t = 1;
int secs = 0;
int mins = 0;
int milliseconds = 0;
Handler handler = new Handler();
//timer

public ItemMemberAdapter(Context context, ArrayList<Item> objects) {
this.context=context;
this.objects=objects;
}

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

@Override
public Item getItem(int position) {
return objects.get(position);
}

@Override
public long getItemId(int position) {
return position;
}
class MyHolder{
TextView m_time,l_time,name;
Button s_btn,l_btn;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;

if(v==null) {
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
v=inflater.inflate(R.layout.item_member_list_app,null);
holder=new MyHolder();
holder.m_time= (TextView)v.findViewById(R.id.textView4);
holder.l_time= (TextView) v.findViewById(R.id.lap_time);
holder.name= (TextView) v.findViewById(R.id.textView5);
holder.s_btn=(Button)v.findViewById(R.id.strt_btn);
holder.l_btn=(Button)v.findViewById(R.id.lap_btn);

v.setTag(holder);
}else {
holder= (MyHolder) v.getTag();
}
itm=null;
itm=getItem(position);
final String nm = itm.getMember_name();
final String t = itm.getTimerOne();

holder.name.setText(nm);
holder.m_time.setText(t);
final Runnable updateTimer = new Runnable() {

public void run() {

timeInMilliseconds = SystemClock.uptimeMillis() - starttime;

updatedtime = timeSwapBuff + timeInMilliseconds;

secs = (int) (updatedtime / 1000);
mins = secs / 60;
secs = secs % 60;
milliseconds = (int) (updatedtime % 1000);
String stime="" + mins + ":" + String.format("%02d", secs) + ":"
+ String.format("%03d", milliseconds);
Log.d("timea", stime);
holder.l_time.setText(stime);
handler.postDelayed(this, 0);
}
};
holder.s_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,"Name : "+nm+" Time : "+t,Toast.LENGTH_SHORT).show();
starttime = SystemClock.uptimeMillis();
handler.postDelayed(updateTimer, 0);
}
});

return v;
}

}

这是我的适配器,现在的问题是,当我单击开始按钮时,计时器启动,我可以看到日志,但该日志值未在 textView 上设置...

最佳答案

你的代码架构很奇怪。

  • 将按钮 onclick 操作移到适配器之外

  • 不要在适配器内运行 Runnable

  • 测量 Activity 时间,并使用 adapter.notifyDataSetChanged() 将数据传递到数组中的适配器

适配器应该只以正确的方式收集和显示数据。所有数据操作都应该在适配器之外。您没有获取值,因为在您的情况下您没有在 UI 线程上进行操作。然而,将其修复为在 UI 线程上工作是有史以来最糟糕的想法。按照上面写的步骤重构了您的代码。

关于java - 适配器中的计时器无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37042991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com