jjoe64.graphview во фрагменте студии android сбрасывается, если я ввожу другой фрагмент - PullRequest
0 голосов
/ 20 июня 2020

Я делаю приложение android studio , в нем есть 3 фрагмента , один из фрагментов принимает значение из базы данных реального времени firebase и строит его на оси y ось x представляет собой переменную, которая увеличивается при изменении y, когда im в фрагменте графика его построение нормально, но если я ввожу другой фрагмент и go обратно к фрагменту графика, график сбрасывается и начинается с x = 0.

Я хочу, чтобы график работал в фоновом режиме, поэтому он строится независимо от того, открыто приложение или нет, для этого я попытался добавить services , asynktask , и совсем недавно надоело рисовать его в потоке переднего плана , но ни одна из них не сработала, вероятно, потому, что я неправильно реализовал их в своем коде.

Мой вопрос в том, как я могу сделать свой фрагмент, который отображает график работы независимо от того, закрыто или открыто мое приложение или фрагмент графика?

это фрагмент построения графика:

public class graph extends Fragment   {
    private LineGraphSeries<DataPoint> series;
    private int lastX = 0;
    DatabaseReference ReadValue;

    private double Ampholder;
    View view;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        view = inflater.inflate(R.layout.graph, container, false);

        ReadValue = FirebaseDatabase.getInstance().getReference("DHT11");

        ReadValue.child("Humidity").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                double Amp = (dataSnapshot.getValue(double.class));
                Ampholder=(Amp);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });




        GraphView graph = (GraphView) view.findViewById(R.id.graph);

        series = new LineGraphSeries<DataPoint>();
        graph.addSeries(series);

        Viewport viewport = graph.getViewport();
        viewport.setYAxisBoundsManual(true);
        viewport.setMinY(0);
        viewport.setMaxY(100);
        viewport.setXAxisBoundsManual(true);
        viewport.setMinX(0);
        viewport.setMaxX(100);

        graph.getViewport().setScrollable(true);
        graph.getViewport().setScrollableY(true);
        graph.getViewport().setScalable(true);
        graph.getViewport().setScalableY(true);

        return view;
    }


    @Override
    public void onStart(){
        super.onStart();
        new Thread(new Runnable() {

            @Override
            public void run() {
                for (int i = 0; i < 1000; i++) {
                    if (getActivity() != null) {


                    getActivity().runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            addEntry();
                        }
                    });
                }
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                    }
                }
            }
        }).start();
    }

    private void addEntry() {
        series.appendData(new DataPoint(lastX++, Ampholder), false, 1000);
//        try {
//            Thread.sleep(600);
//        } catch (InterruptedException e) {
//            // manage
//        }
    }

фрагмент графика. xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".graph">

    <com.jjoe64.graphview.GraphView
        android:id="@+id/graph"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

Основной вид деятельности: * 1 025 *

public class MainActivity extends AppCompatActivity {

    private int A,W;
    Button FragemntMonitor, FragmentEdit,FragmentGraph;
    DatabaseReference ReadValue,LimitCheckAmp,LImitCheckWatt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);




        FragemntMonitor= (Button) findViewById(R.id.firstFragment);
        FragmentEdit= (Button) findViewById(R.id.secondFragment);
        FragmentGraph=(Button)findViewById(R.id.thirdFragment);

        FragmentEdit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loadFragment(new Power_Controle());
            }
        });
        FragemntMonitor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loadFragment(new monitor());
            }
        });
        FragmentGraph.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loadFragment(new graph());
            }
        });
}

 private void loadFragment(Fragment fragment) {
        FragmentManager fm = getFragmentManager();
        FragmentTransaction fragmentTransaction = fm.beginTransaction();
        fragmentTransaction.replace(R.id.frameLayout, fragment);
        fragmentTransaction.commit();
    }
}

основной класс xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/firstFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/button_background_color"
        android:text="Power Controle"
        android:textColor="@color/white"
        android:textSize="20sp" />

    <Button
        android:id="@+id/secondFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="@color/button_background_color"
        android:text="power monitor"
        android:textColor="@color/white"
        android:textSize="20sp" />
    <Button
        android:id="@+id/thirdFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="@color/button_background_color"
        android:text="graph"
        android:textColor="@color/white"
        android:textSize="20sp" />

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="10dp" />
</LinearLayout>
...