Browse Source

处理Oa首页的日历问题,滑动后选中上个月分选中的日期
修复导肮那边闪退问题

Bitliker 9 years ago
parent
commit
97445543a8

+ 3 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/NavigationActivity.java

@@ -27,6 +27,7 @@ import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.oa.baidu.BaiduMapUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.oa.baidu.OnGetRoutePlanResult;
@@ -117,7 +118,8 @@ public class NavigationActivity extends BaseActivity {
 
         public void onGetDrivingRouteResult(DrivingRouteResult result) {
             //驾车
-            if (result == null || SearchResult.ERRORNO.RESULT_NOT_FOUND == result.error) {
+            if (result == null || SearchResult.ERRORNO.RESULT_NOT_FOUND == result.error|| ListUtils.isEmpty(result.getRouteLines())||
+                    result.getRouteLines().get(0)==null) {
                 Toast.makeText(getApplicationContext(), "未搜索到结果", Toast.LENGTH_LONG).show();
                 return;
             }

+ 23 - 71
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OAActivity.java

@@ -8,9 +8,6 @@ import android.os.Handler;
 import android.os.Message;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentPagerAdapter;
 import android.support.v4.view.ViewPager;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -50,7 +47,7 @@ import com.xzjmyk.pm.activity.ui.erp.activity.WorkExtraActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.crm.VisitReportAddActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.form.DataFormDetailActivity;
 import com.xzjmyk.pm.activity.ui.erp.adapter.oa.OAAdapter;
-import com.xzjmyk.pm.activity.ui.erp.fragment.CalendarFragmet;
+import com.xzjmyk.pm.activity.ui.erp.adapter.oa.OACalenderViewPagerAdapter;
 import com.xzjmyk.pm.activity.ui.erp.model.Employees;
 import com.xzjmyk.pm.activity.ui.erp.model.oa.OAModel;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
@@ -70,6 +67,7 @@ import com.xzjmyk.pm.activity.util.DisplayUtil;
 import com.xzjmyk.pm.activity.util.PreferenceUtils;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 import com.xzjmyk.pm.activity.view.MyListView;
+import com.xzjmyk.pm.activity.view.OACalendarView;
 import com.xzjmyk.pm.activity.view.crouton.Crouton;
 import com.xzjmyk.pm.activity.view.crouton.Style;
 import com.xzjmyk.pm.activity.wxapi.ApiConfig;
@@ -160,7 +158,7 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
     private List<OAModel> otherModels;
 
     private OAAdapter adapter; //当前列表的数据
-    private PagerAdapter pagerAdapter;//当前Viewpager适配器
+    private OACalenderViewPagerAdapter pagerAdapter;//当前Viewpager适配器
     private Date curDate;    //当前显示的日期  包含年月日信息
     private Set<Integer> meInt;     //我的任务
     private Set<Integer> otherInt;  //我的下属的任务
@@ -264,6 +262,7 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
     private float moveY;
     private boolean isB2b;
     private String workDailyAdd;
+    private OACalendarView calendarView;
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
@@ -430,10 +429,19 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
 
             @Override
             public void onPageSelected(int position) {
-                posItem = position;
-                curDate = date[position];
                 Calendar c = Calendar.getInstance();
                 c.setTime(curDate);
+                int day = c.get(Calendar.DAY_OF_MONTH);
+                calendarView = pagerAdapter.getmViews().get(position);
+                calendarView.setDateListener(new OACalendarView.OnSelectDateListener() {
+                    @Override
+                    public void result(Date date) {
+                        setClickDay(date);
+                    }
+                });
+                posItem = position;
+                calendarView.setDownIndex(day);
+                curDate = calendarView.getDownDate();
                 setDateTag(curDate);
                 if (CommonUtil.isNetWorkConnected(getApplication())) {
                     loadNetData(TimeUtils.ym_format.format(curDate));
@@ -479,8 +487,6 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
         emptyLayout.setEmptyViewRes(R.layout.oa_empty_list);
         adapter = new OAAdapter(ct, util, new ArrayList<OAModel>());
         oa_listview.setAdapter(adapter);
-        listenerMap = new HashMap<>();
-        listenerDay = new HashMap<>();
         curDate = new Date(System.currentTimeMillis());
         meInt = new HashSet<>();
         otherInt = new HashSet<>();
@@ -503,14 +509,13 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
             //没有下属
         }
         loadNetData(String.valueOf(TimeUtils.ym_long_2_str(System.currentTimeMillis())));
-        posItem = MAX_PAGER / 2;
-        setDate();
+        posItem = OACalenderViewPagerAdapter.MAX_NUM / 2;
         LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) viewPager.getLayoutParams(); // 取控件mGrid当前的布局参数   搜索
         linearParams.height = (getResources().getDisplayMetrics().heightPixels * 1 / 3);// 当控件的高强制设成50象素
         viewPager.setLayoutParams(linearParams); // 使设置好的布局参数应用到控件myGrid
-        pagerAdapter = new PagerAdapter(getSupportFragmentManager());
+        pagerAdapter = new OACalenderViewPagerAdapter(ct);
         viewPager.setAdapter(pagerAdapter);
-        viewPager.setCurrentItem(MAX_PAGER / 2);
+        viewPager.setCurrentItem(OACalenderViewPagerAdapter.MAX_NUM / 2);
         //判断是否是管理员
         CommonInterface.getInstance().judgeManager(this);
         CommonInterface.getInstance().getOutSetInfo(this);
@@ -778,8 +783,6 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
         setAdapterBeans();
     }
 
-    private int MAX_PAGER = 30;
-    private Date[] date = new Date[MAX_PAGER];
 
     private void setDateTag(Date date) {
         Calendar c = Calendar.getInstance();
@@ -792,17 +795,6 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
         week_tv.setText(TimeUtils.getWeek(TimeUtils.s_format.format(date)));
     }
 
-    private void setDate() {
-        //当前天在 MAX_PAGER/2 位置
-        Calendar c = Calendar.getInstance();
-        Date date = new Date();
-        for (int i = 0; i < MAX_PAGER; i++) {
-            c.setTime(date);
-            c.add(Calendar.MONTH, i - (MAX_PAGER / 2));
-            c.set(Calendar.DAY_OF_MONTH, 1);
-            this.date[i] = c.getTime();
-        }
-    }
 
     @Override
     public void onClick(View view) {
@@ -912,8 +904,10 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
     }
 
     public void setDateToListener(Set<Integer> in) {
-        if (listenerMap.containsKey(TimeUtils.ym_format.format(curDate)) && listenerMap.get(TimeUtils.ym_format.format(curDate)) != null)
-            listenerMap.get(TimeUtils.ym_format.format(curDate)).onChange(in);
+        if (calendarView == null) {
+            calendarView = pagerAdapter.getmViews().get(posItem);
+        }
+        calendarView.setDecoratDays(in);
     }
 
     @Override
@@ -930,39 +924,9 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
         }
     }
 
-    class PagerAdapter extends FragmentPagerAdapter {
-
-        public PagerAdapter(FragmentManager fm) {
-            super(fm);
-        }
-
-        @Override
-        public Fragment getItem(int position) {
-            return CalendarFragmet.getInstance(date[position]);
-        }
-
-
-        @Override
-        public void setPrimaryItem(ViewGroup container, int position, Object object) {
-            super.setPrimaryItem(container, position, object);
-//            if (listenerDay.containsKey(TimeUtils.ym_format.format(curDate)) && listenerDay.get(TimeUtils.ym_format.format(curDate)) != null)
-//                listenerDay.get(TimeUtils.ym_format.format(curDate)).onChange(in);
-
-        }
-
-        @Override
-        public int getCount() {
-            return MAX_PAGER;
-        }
-    }
 
     /*当点击了指定日期(点击日期、滑动时候触发)*/
     public void setClickDay(Date date) {
-        if (this.date != null && this.date.length > posItem) {
-            this.date[posItem] = date;
-            Calendar c = Calendar.getInstance();
-            c.setTime(this.date[posItem]);
-        }
         curDate = date;
         setDateTag(date);
         setAdapterBeans();
@@ -976,16 +940,6 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
     }
 
 
-    private Map<String, OnTaskChangeListener> listenerMap;
-
-    public void setListener(String key, OnTaskChangeListener listener) {
-        listenerMap.put(key, listener);
-    }
-    private Map<String, OnDayChangeListener> listenerDay;
-    public void selectDayListener(String key, OnDayChangeListener listener){
-        listenerDay.put(key,listener);
-    }
-
     @Override
     public boolean dispatchTouchEvent(MotionEvent ev) {
         if (scrollable) {
@@ -1017,7 +971,5 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
     public interface OnTaskChangeListener {
         void onChange(Set<Integer> in);
     }
-    public interface OnDayChangeListener {
-        void onChange(int day);
-    }
+
 }

+ 72 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/OACalenderViewPagerAdapter.java

@@ -0,0 +1,72 @@
+package com.xzjmyk.pm.activity.ui.erp.adapter.oa;
+
+import android.content.Context;
+import android.support.v4.view.PagerAdapter;
+import android.util.SparseArray;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.xzjmyk.pm.activity.view.OACalendarView;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * Created by Bitliker on 2017/4/19.
+ */
+
+public class OACalenderViewPagerAdapter extends PagerAdapter {
+    public static final int MAX_NUM = 30;
+    private Context mContext;
+    private SparseArray<OACalendarView> mViews;
+    private Date[] date = new Date[MAX_NUM];
+
+    public OACalenderViewPagerAdapter(Context context) {
+        this.mContext = context;
+        this.mViews = new SparseArray<>();
+        setDate();
+    }
+
+    @Override
+    public int getCount() {
+        return MAX_NUM;
+    }
+
+    @Override
+    public boolean isViewFromObject(View view, Object object) {
+        return view == object;
+    }
+
+    @Override
+    public Object instantiateItem(ViewGroup container, int position) {
+        if (mViews.get(position) == null) {
+            OACalendarView calendarView = new OACalendarView(mContext);
+            Date date = this.date[position];
+            calendarView.setCurDate(date);
+            mViews.put(position, calendarView);
+        }
+        container.addView(mViews.get(position));
+        return mViews.get(position);
+    }
+
+    @Override
+    public void destroyItem(ViewGroup container, int position, Object object) {
+        container.removeView((View) object);
+    }
+
+    public SparseArray<OACalendarView> getmViews() {
+        return mViews;
+    }
+
+    private void setDate() {
+        //当前天在 MAX_PAGER/2 位置
+        Calendar c = Calendar.getInstance();
+        Date date = new Date();
+        for (int i = 0; i < MAX_NUM; i++) {
+            c.setTime(date);
+            c.add(Calendar.MONTH, i - (MAX_NUM / 2));
+            c.set(Calendar.DAY_OF_MONTH, 1);
+            this.date[i] = c.getTime();
+        }
+    }
+}

+ 6 - 21
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/CalendarFragmet.java

@@ -10,12 +10,9 @@ import android.view.ViewGroup;
 
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.erp.activity.oa.OAActivity;
-import com.xzjmyk.pm.activity.util.TimeUtils;
 import com.xzjmyk.pm.activity.view.OACalendarView;
 
-import java.util.Calendar;
 import java.util.Date;
-import java.util.Set;
 
 /**
  * Created by pengminggong on 2016/9/28.
@@ -53,24 +50,12 @@ public class CalendarFragmet extends Fragment {
         //判断是否是当月
         calendarView.getCurDate();
         if (activity != null) {
-            activity.setListener(TimeUtils.ym_format.format(date), new OAActivity.OnTaskChangeListener() {
-                @Override
-                public void onChange(Set<Integer> in) {
-                    calendarView.setDecoratDays(in);
-                }
-            });
-            activity.selectDayListener(TimeUtils.ym_format.format(date), new OAActivity.OnDayChangeListener() {
-                @Override
-                public void onChange(int day) {
-                    Date date=calendarView.getCurDate();
-                    Calendar c=Calendar.getInstance();
-                    c.setTime(date);
-                    c.set(Calendar.DAY_OF_MONTH,day);
-                    date=c.getTime();
-                    calendarView.setCurDate(date);
-                    activity.setClickDay(date);
-                }
-            });
+//            activity.setListener(TimeUtils.ym_format.format(date), new OAActivity.OnTaskChangeListener() {
+//                @Override
+//                public void onChange(Set<Integer> in) {
+//                    calendarView.setDecoratDays(in);
+//                }
+//            });
         }
         calendarView.setDateListener(new OACalendarView.OnSelectDateListener() {
             @Override

+ 7 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/OACalendarView.java

@@ -5,7 +5,6 @@ import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
 
@@ -313,11 +312,16 @@ public class OACalendarView extends View implements View.OnTouchListener {
         return curDate;
     }
 
+    public Date getDownDate() {
+        int day= date[downIndex];
+        Calendar c=Calendar.getInstance();
+        c.setTime(curDate);
+        c.set(Calendar.DAY_OF_MONTH,day);
+        return c.getTime();
+    }
 
     public void setDownIndex(int day) {
-        Log.i("gongpengming", "day=" + day);
         this.downIndex = startIndex + day-1;
-        Log.i("gongpengming", "downIndex=" + downIndex);
         invalidate();
     }