Я пытаюсь решить проблему с двух недель, чтобы установить таймер обратного отсчета в каждой строке списка, начиная отсчет с щелчка по строке. Проблема в том, что таймер запускается во многих строках одновременно, и если я нажимаю кнопку параметров и нажимаю на любое новое действие, и я возвращаюсь к основному, весь обратный отсчет исчезает.
Есть ли у вас какие-либо идеи? вот мой код.
CountDownTest.java
public class CountDownTest extends ListActivity {
Cursor model=null;
TestAdapter adapter=null;
TestHelper helper=null;
long currentId=0;
View currentView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
helper=new TestHelper(this);
model=helper.getAll();
startManagingCursor(model);
adapter=new TestAdapter(model);
setListAdapter(adapter);
}
@Override
public void onDestroy() {
super.onDestroy();
helper.close();
}
@Override
public void onListItemClick(ListView list, View view, int position, long id) {
currentId = id;
currentView = view;
final TextView dt = (TextView)currentView.findViewById(R.id.countDownList);
final CountDownTimer myTimer = new CountDownTimer(60000, 1000) {
public void onTick(long millisUntilFinished) {
dt.setText("Arrives in " + millisUntilFinished/1000 + " seconds");
}
public void onFinish() {
dt.setText("Arrived?");
}
};
myTimer.start();
}
class TestAdapter extends CursorAdapter {
TestAdapter(Cursor c) {
super(EasyQueue.this, c);
}
@Override
public void bindView(View row, Context ctxt, Cursor c) {
TestHolder holder=(TestHolder)row.getTag();
holder.populateFrom(c, helper);
}
@Override
public View newView(Context ctxt, Cursor c, ViewGroup parent) {
LayoutInflater inflater=getLayoutInflater();
View row=inflater.inflate(R.layout.row, parent, false);
TestHolder holder=new TestHolder(row);
row.setTag(holder);
return(row);
}
}
static class TestHolder {
private TextView name=null;
private TextView phone=null;
TestHolder(View row) {
name=(TextView)row.findViewById(R.id.nameList);
phone=(TextView)row.findViewById(R.id.phoneList);
}
void populateFrom(Cursor c, TestHelper helper) {
name.setText(helper.getName(c));
phone.setText(helper.getPhone(c));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(this).inflate(R.menu.option, menu);
return(super.onCreateOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId()==R.id.reset) {
return(true);
}else if (item.getItemId()==R.id.add){
startActivity(new Intent(EasyQueue.this, DetailForm.class));
return(true);
}else if (item.getItemId()==R.id.prefs){
return(true);
}
return(super.onOptionsItemSelected(item));
}
}
Можете ли вы проверить код, пожалуйста? Я пытался с обработчиком, но результат худший. Обратный отсчет сохраняется до нажатия кнопки выбора опции и возвращается, но он начинается с нескольких строк и не всегда начинается. ОГРОМНОЕ СПАСИБО !!!!