Sfoglia il codice sorgente

1.修改Android Apex Mobile KPI数据保存与恢复。

Pen Li 8 anni fa
parent
commit
1ff13f822a

+ 12 - 8
Apex Mobile/app/src/main/java/com/usai/apex/KPI/PieChartView.java

@@ -18,6 +18,7 @@ import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewParent;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Random;
@@ -29,11 +30,11 @@ import java.util.Random;
 
 public class PieChartView extends View {
 
-    private  float titleFontSize = 40.0f;
-    private  float nameFontSize = 50.0f;
-    private  float detal = 10;
-    private  double M_PI = 3.14159265358979323846264338327950288;
-    private  double M_PI_2 = 1.57079632679489661923132169163975144;
+    private static float titleFontSize = 40.0f;
+    private static float nameFontSize = 50.0f;
+    private static float detal = 10;
+    private static double M_PI = 3.14159265358979323846264338327950288;
+    private static double M_PI_2 = 1.57079632679489661923132169163975144;
 
     public interface PieChartItemClickListener {
 
@@ -43,7 +44,9 @@ public class PieChartView extends View {
         void pieChartDidEndTouch();
     }
 
-    public class ChartItem {
+    public static class ChartItem implements Serializable {
+
+        private static final long serialVersionUID = 1437379045091025768L;
 
         public String shortTitle;
         public boolean display = true;
@@ -118,7 +121,7 @@ public class PieChartView extends View {
             float baseY = 0 - top / 2.0f - bottom / 2.0f;//基线中间点的y轴计算公式
 
 
-            titleSize = new PieChartView.Size(width,height);
+            titleSize = new Size(width,height);
             return titleSize;
         }
 
@@ -135,7 +138,8 @@ public class PieChartView extends View {
         }
     }
 
-    private class Size {
+    private static class Size implements Serializable {
+        private static final long serialVersionUID = 3369542887994794927L;
         int mWidth, mHeight;
         public Size(int width, int height) {
             mWidth = width;

+ 47 - 29
Apex Mobile/app/src/main/java/com/usai/apex/mainframe/KPIFragment.java

@@ -30,6 +30,7 @@ import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 
 /**
@@ -38,15 +39,18 @@ import java.util.ArrayList;
 public class KPIFragment extends Fragment implements KPICell.KPIListener {
 
 
-    private class KPIModel {
+    private static class KPIModel implements Serializable {
 
+        private static final long serialVersionUID = -6280156291692980527L;
         ArrayList<PieChartView.ChartItem> items;
         String name;
         int total;
 
     }
 
-    private class Month {
+    private static class Month implements Serializable {
+
+        private static final long serialVersionUID = -1567922292260033377L;
         String shipVal;
         int shipColor = Color.WHITE;
 
@@ -97,7 +101,6 @@ public class KPIFragment extends Fragment implements KPICell.KPIListener {
     JSONObject mData;
     ArrayList<KPIModel> mKPIArr = new ArrayList<>();
     Month mMonthModel;
-    PieChartView chartView; // 用于ChartItem对象创建
     SwipeRefreshLayout mSwipeRefresh;
     ProgressBar mLoadIndicator;
     private KPIFragment self;
@@ -128,13 +131,20 @@ public class KPIFragment extends Fragment implements KPICell.KPIListener {
         mContext = getContext();
         self = this;
 
+        if (savedInstanceState != null) {
+            currentKPI = savedInstanceState.getInt("currentKPI");
+            mKPIArr = (ArrayList<KPIModel>) savedInstanceState.getSerializable("KPIData");
+            mMonthModel = (Month) savedInstanceState.getSerializable("KPIMonth");
+            if (mKPIArr != null) {
+                totalKPI = mKPIArr.size();
+            }
+        }
+
         LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getContext());
         IntentFilter intentFilter = new IntentFilter("com.apex.broadcast.person_mode");
         mReceiver = new KPIBroadcastReceiver();
         localBroadcastManager.registerReceiver(mReceiver,intentFilter);
 
-        chartView = new PieChartView(mContext);
-
         mLoadIndicator = root.findViewById(R.id.loadKPI_indicator);
         mSwipeRefresh = root.findViewById(R.id.kpi_swipe_refresh);
         mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@@ -206,9 +216,14 @@ public class KPIFragment extends Fragment implements KPICell.KPIListener {
 //            }
 //        }
 //
-//        if (mKPIArr == null || mKPIArr.size() == 0) {
-//            loadKPIData();
-//        }
+
+        if (mKPIArr != null && mKPIArr.size() > 0) {
+            int display_index = currentKPI;
+            mKPIPager.setCurrentItem(display_index,false);
+        }
+        if (mKPIArr == null || mKPIArr.size() == 0) {
+            loadKPIData();
+        }
 
         return root;
     }
@@ -261,10 +276,16 @@ public class KPIFragment extends Fragment implements KPICell.KPIListener {
     @Override
     public void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
-        if (mData != null) {
-            outState.putString("KPIData",mData.toString());
-            outState.putInt("currentKPI",currentKPI);
+
+        if (mKPIArr != null) {
+            outState.putSerializable("KPIData",mKPIArr);
+        }
+        if (mMonthModel != null) {
+            outState.putSerializable("KPIMonth",mMonthModel);
         }
+        outState.putInt("currentKPI",currentKPI);
+
+
 //        mKPIArr.clear();
 //        mAdapter.notifyDataSetChanged();
     }
@@ -272,22 +293,15 @@ public class KPIFragment extends Fragment implements KPICell.KPIListener {
     @Override
     public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
         super.onViewStateRestored(savedInstanceState);
-        if (savedInstanceState != null) {
-            currentKPI = savedInstanceState.getInt("currentKPI");
-            String kpiString = savedInstanceState.getString("KPIData");
-            if (kpiString != null) {
-                try {
-                    mData = new JSONObject(kpiString);
-                    prepareData();
-                } catch (JSONException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-
-        if (mKPIArr == null || mKPIArr.size() == 0) {
-            loadKPIData();
-        }
+//        if (savedInstanceState != null) {
+//            currentKPI = savedInstanceState.getInt("currentKPI");
+//            mKPIArr = (ArrayList<KPIModel>) savedInstanceState.getSerializable("KPIData");
+//            mMonthModel = (Month) savedInstanceState.getSerializable("KPIMonth");
+//        }
+//
+//        if (mKPIArr == null || mKPIArr.size() == 0) {
+//            loadKPIData();
+//        }
     }
 
     @Override
@@ -379,6 +393,9 @@ public class KPIFragment extends Fragment implements KPICell.KPIListener {
         JSONArray kpiArray = mData.optJSONArray("KPI");
 
         if (kpiArray != null) {
+            if (mKPIArr == null) {
+                mKPIArr = new ArrayList<>();
+            }
             mKPIArr.clear();
             currentKPI = 1;
             for (int i = 0; i < kpiArray.length(); i++) {
@@ -396,7 +413,7 @@ public class KPIFragment extends Fragment implements KPICell.KPIListener {
                         for (int j = 0; j < jsonArr.length(); j++) {
                             JSONObject item = jsonArr.optJSONObject(j);
                             if (item != null) {
-                                PieChartView.ChartItem itm = chartView.new ChartItem();
+                                PieChartView.ChartItem itm = new PieChartView.ChartItem();
                                 itm.value = Integer.valueOf(item.optString("A_val"));
                                 itm.title = item.optString("full_title");
                                 String color_str = item.optString("color");
@@ -424,7 +441,8 @@ public class KPIFragment extends Fragment implements KPICell.KPIListener {
         }
         mAdapter.notifyDataSetChanged();
         if (mKPIArr != null && mKPIArr.size() > 0) {
-            mKPIPager.setCurrentItem(currentKPI,false);
+            int display_index = currentKPI;
+            mKPIPager.setCurrentItem(display_index,false);
         }
     }