Я делаю приложение 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>