GraphView is not updated when new data is added

喜你入骨 提交于 2019-11-28 06:44:27

问题


I have a GraphView that is not updated when new data is added, it changes the Y value to accommodate for the new data, but it doesn't draw them, here is the code:

 public class MainActivity extends Activity {
    double data = 1;
    double xgraph = 5;
    GraphViewSeries sensorSeries;
    GraphView graphView;
    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...
        sensorSeries = new GraphViewSeries(new GraphViewData[] {
                new GraphViewData(1, 2.0d),
                new GraphViewData(2, 1.5d),
                new GraphViewData(3, 2.5d),
                new GraphViewData(4, 1.0d)
        });
        graphView = new LineGraphView(this,"TEST");
        graphView.addSeries(sensorSeries);
        LinearLayout layout = (LinearLayout) findViewById(R.id.graph2);
        graphView.setViewPort(0, 20);
        layout.addView(graphView);

        refreshButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                sensorSeries.appendData(new GraphViewData(xgraph, data), false);
                graphView.redrawAll();
                myLabel.setText(""+data+" "+xgraph);
                xgraph++;
                dataAcx++;
            }
        });
    }
    ...
}

回答1:


Right now its chafing values but not changing UI, because you need to do such UI update operations in separate thread. You need to place all your code which is inside onClick in Thread/Runnable. Create Thread object inside onClick & place that code.

Refer below link :

http://karanbalkar.com/2014/05/display-graphs-using-graphview-in-android/




回答2:


For changes to take effect, you need to call:

graphView.onDataChanged(false, false);

instead of graphView.redrawAll() in the View.OnClickListener implementation. You must play with the parameters to ensure the best performance, take a look at the javadoc in the source code:

/**
 * Call this to let the graph redraw and recalculate the viewport.
 *
 * This will be called when a new series was added or removed and when data was appended 
 * via {@link com.jjoe64.graphview.series.BaseSeries#appendData(com.jjoe64.graphview.series.DataPointInterface, boolean, int)}
 * or {@link com.jjoe64.graphview.series.BaseSeries#resetData(com.jjoe64.graphview.series.DataPointInterface[])}.
 *
 * @param keepLabelsSize true if you don't want to recalculate the size of the labels. 
 *                       It is recommended to use "true" because this will improve 
 *                       performance and prevent a flickering.
 * @param keepViewport true if you don't want that the viewport will be recalculated.
 *                     It is recommended to use "true" for performance.
 */
public void onDataChanged(boolean keepLabelsSize, boolean keepViewport) { /*...*/ }

No need for Thread/Runnable at all.




回答3:


Wow actually works now, took me quite a while to notice I need a Handler... Thanks, heres my code for other noobs like me:

refreshButton.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v)
        {
            graphHandler.post(
            graphRunnable = new Runnable()
            {
                public void run() 
                {
                    sensorSeries.appendData(new GraphViewData(xgraph, dataAcx), false, 20);
                    graphView.redrawAll();
                    myLabel.setText(""+dataAcx+" "+xgraph);
                    xgraph++;
                    dataAcx++;
                }
            }
            );
        }
    });


来源:https://stackoverflow.com/questions/27375139/graphview-is-not-updated-when-new-data-is-added

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!