Использую библиотеку GraphView для построения графика, для обновления данных построения используется функция series.resetData(getDataPoint()); но по каким то причинам она срабатывает только в методе onCreate. Я же хочу обновлять график каждый раз после выхода активности из паузы, соответственно нужно выполнять функцию в методе onResume, но series.resetData(getDataPoint()); не выполняется вообще нигде кроме onCreate.
public class MainActivity extends AppCompatActivity
{
Cursor cursor;
Cursor cursorMaxY;
DataBase db;
GraphView graph;
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM");
private LineGraphSeries<DataPoint> series;
double maxy;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
graph = (GraphView) findViewById(R.id.graph);
series = new LineGraphSeries<>(new DataPoint[0]);
graph.addSeries(series);
db = new DataBase(this);
db.open();
cursor = db.getAllData();
startManagingCursor(cursor);
cursorMaxY = db.getMaxY();
startManagingCursor(cursorMaxY);
cursorMaxY.moveToFirst();
maxy = cursorMaxY.getInt(0);
//series.resetData(getDataPoint());
graph.getGridLabelRenderer().setLabelFormatter(new
DefaultLabelFormatter() //тут настраиваем форматирование
{
@Override
public String formatLabel(double value, boolean isValueX)
{
if (isValueX)
{
return sdf.format(new Date((long) value));
} else
{
return super.formatLabel(value, isValueX);
}
}
});
private DataPoint[] getDataPoint() // тут получаем данные для построения графика из БД
{
cursor = db.getAllData();
DataPoint[] dp = new DataPoint[cursor.getCount()];
for (int i = 0; i < cursor.getCount(); i++)
{
cursor.moveToNext();
dp[i] = new DataPoint(cursor.getFloat(3), cursor.getInt(2));
}
return dp;
}
@Override
protected void onResume()
{
series.resetData(getDataPoint());
super.onResume();
Toast toast = Toast.makeText(getApplicationContext(),
"это работает", Toast.LENGTH_SHORT);
toast.show();
}
}
P.S. onResume срабатывает корректно и выдает всплывающее сообщение, но series.resetData(getDataPoint()); не срабатывает
Буду рад любой помощи, спасибо!
Надо вызвать что-то типа такого:
series.resetData(getDataPoint()); //обновить данные
graph = (GraphView) findViewById(R.id.graph); //вьюшка где у вас что-то рисуется
graph.invalidate(); //дернуть/сообщить вьюшке, что данные изменились
Предупреждаю, что может не сработать invalidate() с предупреждением, что у вас попытка вмешаться из другого потока, поэтому возможно потребуется обернуть его в runOnUiThread() или вызвать postInvalidate() - в общем надо экспериментировать - зависит от места где вы это вызываете.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости