Большое спасибо за ответ! Но вы, наверно невнимательно посмотрели код, и еще выше я человеку в комментарии весь код класса впихнул, проблема больше идеалистическая) Как лучше реализовать. В этом примере я пытался делать через chronometer в каждой row listview, но мне кажется в написанном мною адаптере я допустил логическую ошибку, я уже обращался, что бы не соврать минимум к 20 людям, и никто не смог дать внятного объяснения почему так происходит. Проект я 3 раза переписывал делая все шаг за шагом, все хорошо до двух if'ов там в коде, они закомментированы. Сейчас я переделываю все с использованием Runnable, что бы обновлялся вн. вид экрана, а по нажатию Stop из очереди удалялось соообщение. Целью вопроса было узнать либо в чем конкретно проблема, либо рекомендацию как можно было бы правильно с точки зрения красивого кода/избежание утечек памяти/учета поворота экрана/чистоты кода и тд написать этот маленький модуль приложения.
public class MainActivity extends ActionBarActivity implements LoaderManager.LoaderCallbacks {
ListView listView;
MyAdapter myAdapter;
private final int LOADER_ID =1;
SQLiteDatabase db;
Bundle bundle;
List lastPauseList;
List positionnList;
List startList;
List basesList;
List tested;
List elapsed;
List trackerList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bundle = savedInstanceState;
db = RemindMe.db;
trackerList = Tracker.getListAll(db);
String[] from = {Tracker.COL_NAME,Tracker.COL_ELAPSED_TIME};
int[]to={R.id.row_name,R.id.row_chronometer};
startList = new ArrayList(trackerList.size());
lastPauseList = new ArrayList(trackerList.size());
for (int i = 0; i onCreateLoader(int i, Bundle bundle) {
return new TrackLoader(this,db);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onLoadFinished(Loader loader, Cursor cursor) {
myAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader loader) {
}
static class TrackLoader extends CursorLoader {
SQLiteDatabase db;
public TrackLoader(Context context,SQLiteDatabase db){
super(context);
this.db = db;
}
@Override
public Cursor loadInBackground() {
return Tracker.getAll(db);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
for (int i = 0; i 1000){
outState.putLong("elapsedTime " + i, elapsed.get(i));
}
outState.putLong("base "+i,basesList.get(i));
outState.putLong("lastPause "+i,lastPauseList.get(i));
outState.putBoolean("start " + i, startList.get(i));
}
String getTime(long time){
int hours = (int)(time/3600000);
int minutes = (int)(time -hours*3600000)/60000;
int seconds = (int)(time-hours*3600000-minutes*60000)/1000;
String hour = (hours<9?"0"+hours:hours).toString();
String min = (minutes<9?"0"+minutes:minutes).toString();
String sec = (seconds<9?"0"+seconds:seconds).toString();
return ""+hour+":"+min+":"+sec;
}
public class MyAdapter extends SimpleCursorAdapter{
Context context;
int resorceID;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public MyAdapter(Context context,int resourceID,Cursor c,String[] from,int[]to,int flags){
super(context,resourceID,c,from,to,flags);
this.context=context;
this.resorceID =resourceID;
elapsed = new ArrayList(trackerList.size());
basesList = new ArrayList(trackerList.size());
for (int i = 0; i elapsed.get(position))//если время, полученое после поворота больше, которое насчитает в onTick, запишется в список, но такого никогда не будет
elapsed.set(position, elapsedTime);
if(startList.get(position)==bundleIsItStart)//по аналогии как выше, если если текущий элемент == статусу, пишем в список статус, иначе элемент остается в списке
startList.set(position,bundleIsItStart);
if(lastPauseList.get(position)>lastPause[0])
lastPauseList.set(position,lastPause[0]);
В следующем комментарии я кину весь код класса (в вопросе 10К ограничение) я все переписал, проблем с сохранением данных нет, с этим все стабильно, я там закомментировал два условие после которых я начинаются проблемы, начинается лже-отсчет времени первой позиции.