Handler를 사용하여 매초 00:00:00부터 시작하는 timer로 textView를 업데이트하려고합니다. 나 또한 맞춤형 어댑터로 작업하고있다. 그래서 각 행에는 타이머 textView, 시작 및 중지 버튼이 있습니다. 동일한 행에서 timerTextView를 업데이트하려고 시도했지만 listView의 마지막 행에서 textView를 업데이트하는 결과가 발생했습니다.누구나 사용자 정의 어댑터를 사용하여 동일한 행에서 TextView (Timer TextView가 Handler를 사용하여 매초마다 업데이트 됨)를 업데이트 할 수 있습니까?
public class ItemAdapter extends ArrayAdapter<Items>
{
TextView labelTimer;
int passedSeconds = 0;
Boolean isActivityRunning = false;
Timer timer;
TimerTask timerTask;
Context myContext;
int myLayoutResourceID;
Items[] myData = null;
ItemHolder holder = null;
Integer pos;
public ItemAdapter(Context myContext, int myLayoutResourceID, Items[] myData) {
super(myContext,myLayoutResourceID,myData);
this.myContext = myContext;
this.myData = myData;
this.myLayoutResourceID = myLayoutResourceID;
}
@Override
public Items getItem(int position)
{
return super.getItem(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
//ItemHolder holder = null;
if(row == null) {
LayoutInflater inflater = LayoutInflater.from(myContext);
row = inflater.inflate(myLayoutResourceID, parent, false);
holder = new ItemHolder();
holder.nameView = (TextView) row.findViewById(R.id.nameTextView);
holder.timerView = (TextView) row.findViewById(R.id.timerTextView);
holder.imageView = (ImageView) row.findViewById(R.id.imageView);
holder.startButton = (Button) row.findViewById(R.id.startButton);
holder.stopButton = (Button) row.findViewById(R.id.stopButton);
row.setTag(holder);
}
else
{
holder = (ItemHolder) row.getTag();
}
Items item = myData[position];
holder.timerView.setText(item.timer);
final Button srBtn = holder.startButton;
srBtn.setText("START");
//Setup and reuse the same listener each row
Integer rowPosition = position;
pos = position;
holder.startButton.setTag(rowPosition);
holder.timerView.setTag(rowPosition);
final TextView timeV = holder.timerView;
labelTimer = timeV;
labelTimer.setTag(pos);
Log.v("Get tag while creating"+labelTimer.getTag()+" ","");
//Setting the view to reflect the data we need to display
holder.nameView.setText(item.itemName);
int resid = myContext.getResources().getIdentifier(item.itemImage,"drawable",myContext.getPackageName());
holder.imageView.setImageResource(resid);
holder.startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isActivityRunning) {
//pause running activity
timer.cancel();
srBtn.setText("START");
isActivityRunning = false;
} else {
reScheduleTimer();
srBtn.setText("PAUSE");
isActivityRunning = true;
}
}
});
holder.stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timer.cancel();
passedSeconds = 0;
timeV.setText("00 : 00 : 00");
srBtn.setText("START");
isActivityRunning = false;
}
});
return row;
}
public void reScheduleTimer(){
timer = new Timer();
timerTask = new myTimerTask();
timer.schedule(timerTask, 0, 1000);
}
private class myTimerTask extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
passedSeconds++;
updateLabel.sendEmptyMessage(0);
}
}
private Handler updateLabel = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
//super.handleMessage(msg);
int seconds = passedSeconds % 60;
int minutes = (passedSeconds/60) % 60;
int hours = (passedSeconds/3600);
Log.v("Get tag while updating = "+labelTimer.getTag()+" ","");
labelTimer.setText(String.format("%02d : %02d : %02d", hours, minutes, seconds));
}
};
private static class ItemHolder {
TextView nameView;
TextView timerView;
ImageView imageView;
Button startButton;
Button stopButton;
}
}
누군가 구현 방법을 설명 할 수 있습니까? 아래에 주어진 답은 저에게 해결책을 제공하지 않습니다.
유사한 응용 프로그램에 대한 링크는 다음과 같습니다 https://play.google.com/store/apps/details?id=com.aloggers.atimeloggerapp&hl=en
설명에 코드를 입력 해주세요. –
죄송합니다. 샘플 애플리케이션을 작성할 시간이 없습니다. –