Explorar o código

1.修改Android Apex Drivers首页首页滑动崩溃。
2.修改Android Apex Drivers首页点击选中效果。

Pen Li %!s(int64=7) %!d(string=hai) anos
pai
achega
aa547cf9c3

+ 1 - 2
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/Detail/DetailActivity.java

@@ -47,8 +47,7 @@ import org.json.JSONObject;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+
 
 import static com.usai.redant.apexdrivers.Detail.Model.DetailSubActionModel.DetailActionSubType.DetailActionSubTypeEnum;
 import static com.usai.redant.rautils.Utils.Network.RESULT_TRUE;

+ 5 - 3
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/Detail/DetailAdapter.java

@@ -327,7 +327,7 @@ public class DetailAdapter extends BaseExpandableListAdapter {
                     btn.setOnClickListener(new View.OnClickListener() {
                         @Override
                         public void onClick(View v) {
-                            if (mDelegate != null) {
+                            if (mDelegate != null && mDelegate.get() != null) {
                                 mDelegate.get().performAction(v,subActionModel);
                             }
                         }
@@ -362,8 +362,10 @@ public class DetailAdapter extends BaseExpandableListAdapter {
                 @Override
                 public void onClick(View v) {
                     if (mWeakLocation != null && mDelegate != null) {
-                        DetailLocationModel model = mWeakLocation.get();
-                        mDelegate.get().navigationTo(model);
+                        if (mWeakLocation.get() != null && mDelegate.get() != null) {
+                            DetailLocationModel model = mWeakLocation.get();
+                            mDelegate.get().navigationTo(model);
+                        }
                     }
                 }
             });

+ 120 - 0
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/Home/HomeCellLayout.java

@@ -0,0 +1,120 @@
+package com.usai.redant.apexdrivers.Home;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.usai.redant.apexdrivers.R;
+
+import java.lang.ref.WeakReference;
+
+public class HomeCellLayout extends RelativeLayout implements HomeFragment.OrderModelDelegate {
+
+    TextView titleTv, orderNoTv, containerNoTv, dateTv;
+    ImageView statusView, markView;
+    RelativeLayout contentContainer;
+
+    WeakReference<HomeFragment.HomeOrderModel> weakModel;
+    private boolean initialed = false;
+
+    public HomeCellLayout(Context context) {
+        super(context);
+
+    }
+
+    public HomeCellLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+    }
+
+    public HomeCellLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+
+    }
+
+    public HomeCellLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+    }
+
+    private void init() {
+
+        contentContainer = findViewById(R.id.content_container);
+        titleTv = findViewById(R.id.title_tv);
+        orderNoTv = findViewById(R.id.order_no_tv);
+        containerNoTv = findViewById(R.id.container_no_tv);
+        dateTv = findViewById(R.id.date_tv);
+        statusView = findViewById(R.id.status_view);
+        markView = findViewById(R.id.order_mark_view);
+
+        initialed = true;
+    }
+
+    public void bindOrderModel(HomeFragment.HomeOrderModel model) {
+
+        if (!initialed) {
+            init();
+        }
+
+        if (weakModel != null && weakModel.get() != null) {
+            try {
+                weakModel.get().delegate = null; // 会有null的情况
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        if (model != null) {
+            weakModel = new WeakReference<>(model);
+            weakModel.get().delegate = this;
+        } else {
+            weakModel = null;
+        }
+
+        refresh();
+
+    }
+
+    @Override
+    public void refresh() {
+
+        if (weakModel == null || weakModel.get() == null) {
+            return;
+        }
+
+        HomeFragment.HomeOrderModel model = weakModel.get();
+        titleTv.setText(model.title);
+        orderNoTv.setText(model.orderNo);
+        containerNoTv.setText(model.containerNo);
+        dateTv.setText(model.date);
+
+        if (model.status == HomeFragment.HomeOrderModel.OrderStatusNew) {
+            markView.setVisibility(View.VISIBLE);
+        } else {
+            markView.setVisibility(View.GONE);
+        }
+
+        if (model.selected || isPressed()) {
+            contentContainer.setBackgroundResource(R.drawable.round_corner_selection_bg);
+        } else {
+            contentContainer.setBackgroundResource(R.drawable.round_corner_bg);
+        }
+
+    }
+
+    @Override
+    protected void drawableStateChanged() {
+        super.drawableStateChanged();
+
+        RelativeLayout contentContainer = findViewById(R.id.content_container);
+        if (contentContainer == null) {
+            return;
+        }
+
+        refresh();
+    }
+}

+ 20 - 91
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/Home/HomeFragment.java

@@ -38,9 +38,6 @@ import org.json.JSONObject;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
-import java.util.Date;
-import java.util.Timer;
-import java.util.TimerTask;
 
 public class HomeFragment extends Fragment {
 
@@ -92,6 +89,14 @@ public class HomeFragment extends Fragment {
                 HomeSectionModel sectionModel = mSectionArray.get(groupPosition);
                 HomeOrderModel orderModel = sectionModel.orderModelForIndex(childPosition);
 
+                if (mSelectedModel != null) {
+                    mSelectedModel.setSelection(false);
+                }
+                mSelectedModel = orderModel;
+                if (mSelectedModel != null) {
+                    mSelectedModel.setSelection(true);
+                }
+
                 Intent intent = DetailActivity.build(mCtx,orderModel.orderID);
                 mCtx.startActivity(intent);
 
@@ -99,7 +104,6 @@ public class HomeFragment extends Fragment {
             }
         });
 
-
         mRefresh = view.findViewById(R.id.home_refresh);
         mRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
             @Override
@@ -242,6 +246,7 @@ public class HomeFragment extends Fragment {
                         int restul = json.getInt("result");
                         if (restul == Network.RESULT_TRUE) {
 
+                            mSelectedModel = null;
                             handleJson(json);
 
                         } else {
@@ -397,99 +402,23 @@ public class HomeFragment extends Fragment {
             }
         }
 
-        private class OrderCellHolder implements OrderModelDelegate,View.OnTouchListener {
-
-            TextView titleTv, orderNoTv, containerNoTv, dateTv;
-            ImageView statusView, markView;
-            RelativeLayout contentContainer;
-
-            WeakReference<HomeOrderModel> weakModel;
+        private class OrderCellHolder {
 
+            WeakReference<HomeCellLayout> weakCell;
 
             OrderCellHolder(View view) {
 
-                contentContainer = view.findViewById(R.id.content_container);
-                titleTv = view.findViewById(R.id.title_tv);
-                orderNoTv = view.findViewById(R.id.order_no_tv);
-                containerNoTv = view.findViewById(R.id.container_no_tv);
-                dateTv = view.findViewById(R.id.date_tv);
-                statusView = view.findViewById(R.id.status_view);
-                markView = view.findViewById(R.id.order_mark_view);
-
-                contentContainer.setOnTouchListener(this);
-
                 view.setTag(this);
+                weakCell = new WeakReference<>((HomeCellLayout) view);
             }
 
             void bindOrderModel(HomeOrderModel model) {
 
-                if (weakModel != null) {
-                    weakModel.get().delegate = null;
-                }
-
-                if (model != null) {
-                    weakModel = new WeakReference<>(model);
-                    weakModel.get().delegate = this;
-                } else {
-                    weakModel = null;
-                }
-
-                refresh();
-
-            }
-
-            @Override
-            public void refresh() {
-
-                if (weakModel == null) {
-                    return;
-                }
-
-                HomeOrderModel model = weakModel.get();
-                titleTv.setText(model.title);
-                orderNoTv.setText(model.orderNo);
-                containerNoTv.setText(model.containerNo);
-                dateTv.setText(model.date);
-
-                if (model.status == HomeOrderModel.OrderStatusNew) {
-                    markView.setVisibility(View.VISIBLE);
-                } else {
-                    markView.setVisibility(View.GONE);
-                }
-
-                if (!model.selected) {
-                    contentContainer.setBackgroundResource(R.drawable.round_corner_bg);
-                } else {
-                    contentContainer.setBackgroundResource(R.drawable.round_corner_selection_bg);
+                if (weakCell != null && weakCell.get() != null) {
+                    weakCell.get().bindOrderModel(model);
                 }
-
             }
 
-            @Override
-            public boolean onTouch(View v, MotionEvent event) {
-
-                select();
-
-                return false;
-            }
-
-            public void select() {
-
-                if (mSelectedModel != null && mSelectedModel != weakModel.get()) {
-                    mSelectedModel.setSelection(false);
-                }
-
-                if (weakModel != null) {
-                    mSelectedModel = weakModel.get();
-                } else {
-                    mSelectedModel = null;
-                }
-
-                if (mSelectedModel != null) {
-                    mSelectedModel.setSelection(true);
-                }
-
-            }
         }
 
         @Override
@@ -573,16 +502,16 @@ public class HomeFragment extends Fragment {
         public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
 
 
-            View header;
+            View cell;
             OrderCellHolder holder;
             if (convertView == null) {
 
-                header = LayoutInflater.from(mCtx).inflate(R.layout.home_order_cell,null);
-                holder = new OrderCellHolder(header);
+                cell = LayoutInflater.from(mCtx).inflate(R.layout.home_order_cell,null);
+                holder = new OrderCellHolder(cell);
 
             } else {
 
-                header = convertView;
+                cell = convertView;
                 holder = (OrderCellHolder)convertView.getTag();
             }
 
@@ -591,7 +520,7 @@ public class HomeFragment extends Fragment {
 
             holder.bindOrderModel(orderModel);
 
-            return header;
+            return cell;
         }
 
         @Override
@@ -610,7 +539,7 @@ public class HomeFragment extends Fragment {
         }
     }
 
-    private class HomeOrderModel {
+    public class HomeOrderModel {
 
        static final int OrderStatusFinish = 0;
        static final int OrderStatusProcessing = 1;

+ 8 - 8
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/Update/UpdateAdapter.java

@@ -254,7 +254,7 @@ public class UpdateAdapter extends BaseExpandableListAdapter {
             scannerBtn.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
-                    if (weakInput != null && mDelegate != null) {
+                    if (weakInput != null && weakInput.get() != null && mDelegate != null && mDelegate.get() != null) {
                         UpdateInputModel model = weakInput.get();
                         mDelegate.get().scannerButtonDidClick(model);
                     }
@@ -269,7 +269,7 @@ public class UpdateAdapter extends BaseExpandableListAdapter {
         public void bindModel(UpdateInputModel model) {
 
             // 释放旧的
-            if (weakInput != null) {
+            if (weakInput != null && weakInput.get() != null) {
                 weakInput.get().setDelegate(null);
             }
 
@@ -287,7 +287,7 @@ public class UpdateAdapter extends BaseExpandableListAdapter {
         @Override
         public void refresh() {
 
-            if (weakInput != null) {
+            if (weakInput != null && weakInput.get() != null) {
                 titleTv.setText(weakInput.get().title);
                 valueEt.setText(weakInput.get().value);
                 if (weakInput.get().scannable) {
@@ -324,7 +324,7 @@ public class UpdateAdapter extends BaseExpandableListAdapter {
         public void bindModel(UpdateMultInputModel model) {
 
             // 释放旧的
-            if (weakInput != null) {
+            if (weakInput != null && weakInput.get() != null) {
                 weakInput.get().setDelegate(null);
             }
 
@@ -342,7 +342,7 @@ public class UpdateAdapter extends BaseExpandableListAdapter {
         @Override
         public void refresh() {
 
-            if (weakInput != null) {
+            if (weakInput != null && weakInput.get() != null) {
                 titleTv.setText(weakInput.get().title);
                 valueEt.setText(weakInput.get().value);
             } else {
@@ -381,7 +381,7 @@ public class UpdateAdapter extends BaseExpandableListAdapter {
             photoBtn.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
-                    if (weakPhoto != null && mDelegate != null) {
+                    if (weakPhoto != null && weakPhoto.get() != null && mDelegate != null && mDelegate.get() != null) {
                         UpdatePhotoModel model = weakPhoto.get();
                         mDelegate.get().photoButtonDidClick(model);
                     }
@@ -392,7 +392,7 @@ public class UpdateAdapter extends BaseExpandableListAdapter {
 
         public void bindModel(UpdatePhotoModel model) {
 
-            if (weakPhoto != null) {
+            if (weakPhoto != null && weakPhoto.get() != null) {
                 weakPhoto.get().setDelegate(null);
             }
 
@@ -409,7 +409,7 @@ public class UpdateAdapter extends BaseExpandableListAdapter {
         @Override
         public void refresh() {
 
-            if (weakPhoto != null) {
+            if (weakPhoto != null && weakPhoto.get() != null) {
                 titleTv.setText(weakPhoto.get().title);
                 photoBtn.setImageBitmap(weakPhoto.get().getPhoto());
             } else {

+ 2 - 2
ApexDrivers/app/src/main/res/drawable-v24/round_corner_selection_bg.xml

@@ -3,11 +3,11 @@
 
     <corners android:radius="5dp"/>
 
-    <solid android:color="#ff0000"/>
+    <solid android:color="#aad3df"/>
 
     <stroke
         android:width="1dp"
-        android:color="#ff0000"
+        android:color="#aad3df"
         />
 
 </shape>

+ 7 - 0
ApexDrivers/app/src/main/res/drawable/home_list_selector.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:state_pressed="true" android:drawable="@android:color/transparent"/>
+    <item android:state_pressed="false" android:drawable="@android:color/transparent"/>
+
+</selector>

+ 7 - 0
ApexDrivers/app/src/main/res/drawable/home_selector.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:state_pressed="true" android:drawable="@drawable/round_corner_selection_bg"/>
+    <item android:state_pressed="false" android:drawable="@drawable/round_corner_bg"/>
+
+</selector>

+ 1 - 0
ApexDrivers/app/src/main/res/layout/fragment_home.xml

@@ -17,6 +17,7 @@
             android:layout_height="match_parent"
             android:groupIndicator="@null"
             android:divider="@null"
+            android:listSelector="@drawable/home_list_selector"
             >
 
         </ExpandableListView>

+ 2 - 3
ApexDrivers/app/src/main/res/layout/home_order_cell.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<com.usai.redant.apexdrivers.Home.HomeCellLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content">
 
@@ -8,7 +8,6 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_margin="5dp"
-        android:background="@drawable/round_corner_bg"
         >
 
         <ImageView
@@ -124,4 +123,4 @@
     </RelativeLayout>
 
 
-</RelativeLayout>
+</com.usai.redant.apexdrivers.Home.HomeCellLayout>