Несколько CountDown в ListActivity на Android - PullRequest
2 голосов
/ 03 сентября 2011

Я пытаюсь решить проблему с двух недель, чтобы установить таймер обратного отсчета в каждой строке списка, начиная отсчет с щелчка по строке. Проблема в том, что таймер запускается во многих строках одновременно, и если я нажимаю кнопку параметров и нажимаю на любое новое действие, и я возвращаюсь к основному, весь обратный отсчет исчезает. Есть ли у вас какие-либо идеи? вот мой код.

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));
}

}

Можете ли вы проверить код, пожалуйста? Я пытался с обработчиком, но результат худший. Обратный отсчет сохраняется до нажатия кнопки выбора опции и возвращается, но он начинается с нескольких строк и не всегда начинается. ОГРОМНОЕ СПАСИБО !!!!

...