Проблема с осью Graphview при генерации внутри OnClick - PullRequest
0 голосов
/ 14 октября 2018

Поэтому, когда я генерирую график внутри onCreate, я получаю именно тот график, который мне нужен Правильный график Но когда я пытаюсь сгенерировать график после нажатия кнопки, я получаю этот Неверный график Я пытаюсь сгенерировать график данных, которые выбирает пользователь, поэтому мне нужно сделать это в onClick, иначе имя, которое будет использоваться для фильтрации базы данных, должно быть жестко закодировано в onCreate («s» в одномкомментариев onCreate. Ниже приведен код моего OnCreate.

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main3);

    //inicializando banco de dados
    db = new MySQLiteHelper(this);
    graph = (GraphView) findViewById(R.id.graph);
    nomeEscolhido = (EditText) findViewById(R.id.editTextNome);

    // if I uncomment these two lines I get the correct graph
    //results = db.findRegisterByName("s");
    //generateGraph(results);

}

Это событие вызывается при нажатии кнопки: (Если эти две строки в OnCreate выше прокомментированы и кнопкащелкнув, я получаю неправильный график)

 public void playerToGraph(View view){
    //results = db.getAllRegisters();
        results = db.findRegisterByName(nomeEscolhido.getText().toString());
        generateGraph(results);


}

Теперь я также опубликую функцию, которую я использую для создания графика. Проводя исследование, я обнаружил здесь GraphView не обновляет , что мне может понадобитьсяобработчик и выполняемый поток, поэтому я добавил их в generateGraph, но это не имело значения, я получаю те же результаты, что и раньше.

public void generateGraph(final List<Register> results){
    graph.removeAllSeries();
    final int size = results.size();
    final List <Date> dates = new LinkedList<Date>();

    Log.d("graphtag","size: "+Integer.toString(size));

    Calendar calendar = Calendar.getInstance();
    for(int i = 0 ; i<size;i++){
        Date dd = new Date();
        dd=convertToDate(results.get(i).getDate());
        //calendar.setTime(convertToDate(results.get(i).getDate()));
        //dd  = calendar.getTime();
        dates.add(dd);
        Log.d("graphtag","data convertida: "+ dates.toString());
    }

    graphHandler.post(
            graphRunnable = new Runnable()
            {
                public void run()
                {
                    LineGraphSeries<DataPoint> series = new LineGraphSeries<>();

                    for(int i =0;i<size;i++) {
                        DataPoint DP = new DataPoint(dates.get(i), results.get(i).getTime());
                        //Log.d("graphtag",DP.toString());
                        series.appendData(DP, true, size);
                    }



                    Log.d("graphtag",Integer.toString(size));

                    graph.getViewport().setScrollable(true); // enables horizontal scrolling
                    graph.getViewport().setScrollableY(true); // enables vertical scrolling
                    // graph.getViewport().setScalable(true); // enables horizontal zooming and scrolling
                    //graph.getViewport().setScalableY(true); // enables vertical zooming and scrolling

                    series.setDrawDataPoints(true);
                    graph.addSeries(series);


                    graph.getGridLabelRenderer().setLabelFormatter(new DateAsXAxisLabelFormatter(getActivity()));
                    graph.getGridLabelRenderer().setTextSize(30);
                    //graph.getGridLabelRenderer().setNumHorizontalLabels(size);

                    graph.getViewport().setMinX(dates.get(0).getTime());
                    graph.getViewport().setMaxX(dates.get(size-1).getTime());

                    graph.getViewport().setXAxisBoundsManual(true);

                    graph.getViewport().setMinY(results.get(0).getTime());
                    graph.getViewport().setMaxY(results.get(size-1).getTime());

                    graph.getGridLabelRenderer().setNumVerticalLabels(size);
                    graph.getViewport().setYAxisBoundsManual(true);
                    //graph.getViewport().setMinX(Double.parseDouble(results.get(0).getDate()));
                    //graph.getViewport().setMaxX(Double.parseDouble(results.get(3).getDate()));


                    graph.getGridLabelRenderer().setHumanRounding(false);
                }
            }
    );



}

Я также где-то читал, что мне, возможно, придется сбросить данные ( GraphView и resetData ), поэтому я использовал graph.resetseries (), но это не имело значения.Там также говорится, что это может сработать, чтобы полностью удалить представление GraphView и создать новое, но я не уверен, как я мог бы это сделать.

Любая помощь и идеи будут высоко оценены!

...