Question

I am trying to set up a chart in one of my fragments.

The problem is when i call the fragment that the chart should be called I dont get the proper layout.

Here is what happens :

enter image description here

I don't understand why when i try to add the chart the layout resizes. Im using aChartEngine.

Here is XML of my "graph_fragment"

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:id="@+id/linearLayout_graphFragment_conteiner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:orientation="vertical" >
    </LinearLayout>

</RelativeLayout>

And here is what i do inside my fragment (BaseData extends Fragment) :

public class LineGraphFragment extends BaseData {

    private GraphicalView mChartView;

    public LineGraphFragment() {
        // Empty constructor required for fragment subclasses
    }

    //----------------------------------------------------
    //Chart variables

    private TimeSeries series; //A single series or line is defined.
    private XYSeriesRenderer renderer; //A single render is responsible for a single series or line.
    private XYMultipleSeriesDataset mSeriesDataset; //All series or lines are added here to be displayed later.
    private XYMultipleSeriesRenderer mSeriesRendered; // All renders are added here. 
    //----------------------------------------------------




    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup conteiner, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.graph_fragment, conteiner, false);
    }

    @Override
    public void onStart(){
        super.onStart();

        Log.w("LineGraphFragment","Inside onStart");

        displayChart();
    }



    private void initializeChartValues() {
        int[] x = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        int[] y = { 30, 34, 45, 57, 77, 90, 123, 23, 123, 92 };

        //Fill the series with data
        series = new TimeSeries("Line1");
        for (int i = 0; i < x.length; i++) {
            series.add(x[i], y[i]);
        }
        //Define a render for the series
        renderer = new XYSeriesRenderer();

        //Add the series in multiple series dataset
        mSeriesDataset = new XYMultipleSeriesDataset();
        mSeriesDataset.addSeries(series);

        //Add the renderer in the multiple series renderer
        mSeriesRendered = new XYMultipleSeriesRenderer();
        mSeriesRendered.addSeriesRenderer(renderer);
    }



    // WOrking on half screen
    private void displayChart() {

        //First initialize the values of the chart.
        initializeChartValues();

        //Define the parent where the chart will go
        LinearLayout chartContainer;
        chartContainer = (LinearLayout) getActivity().findViewById(R.id.linearLayout_graphFragment_conteiner);

        //Create and add the chart to the parent
        mChartView = ChartFactory.getLineChartView(getActivity(), mSeriesDataset, mSeriesRendered);
        chartContainer.addView(mChartView);

        //  viewParrent.addView(chartContainer);


    }
}

Any help and info will be much appreciated.

Was it helpful?

Solution

I actualy managed to fix my problem.

Here is sample code if some one is interested:

//----------------------------------------------------
    //Chart variables

    private GraphicalView mChartView;
    private TimeSeries series; //A single series or line is defined.
    private XYSeriesRenderer renderer; //A single render is responsible for a single series or line.
    private XYMultipleSeriesDataset mSeriesDataset; //All series or lines are added here to be displayed later.
    private XYMultipleSeriesRenderer mSeriesRendered; // All renders are added here. 

    //----------------------------------------------------


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.graph_fragment, container, false);

        // add the data here if necessary
        // ...
        LinearLayout layout = (LinearLayout) view.findViewById(R.id.graph1);

        layout.addView(displayChart());

        return view;
    }



    private void initializeChartValues() {
        int[] x = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        int[] y = { 30, 34, 45, 57, 77, 90, 123, 111, 123, 92 };

        //Fill the series with data
        series = new TimeSeries("Line1");
        for (int i = 0; i < x.length; i++) {
            series.add(x[i], y[i]);
        }
        //Define a render for the series
        renderer = new XYSeriesRenderer();
        renderer.setColor(Color.RED);
        renderer.setPointStyle(PointStyle.SQUARE);
        renderer.setFillPoints(true);


        //Add the series in multiple series dataset
        mSeriesDataset = new XYMultipleSeriesDataset();
        mSeriesDataset.addSeries(series);

        //Add the renderer in the multiple series renderer
        mSeriesRendered = new XYMultipleSeriesRenderer();
        mSeriesRendered.addSeriesRenderer(renderer);
        //Customize graph itself
        mSeriesRendered.setChartTitle("Тегло");
    }


    // WOrking on half screen
    private GraphicalView displayChart() {

        //First initialize the values of the chart.
        initializeChartValues();

        //Define the parent where the chart will go
        LinearLayout chartContainer;
        chartContainer = (LinearLayout) getActivity().findViewById(R.id.linearLayout_graphFragment_conteiner);

        //Create and add the chart to the parent
        mChartView = ChartFactory.getLineChartView(getActivity(), mSeriesDataset, mSeriesRendered);


        return mChartView;

    }

I actualy never use onStart. Also I initialize the chart in onCreateView and then return the view in onCreateView

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top