Explorar el Código

Android 弹窗的使用

lizhe hace 2 años
padre
commit
9a651902e2

+ 0 - 1
.idea/gradle.xml

@@ -11,7 +11,6 @@
           <set>
             <option value="$PROJECT_DIR$" />
             <option value="$PROJECT_DIR$/app" />
-            <option value="$PROJECT_DIR$/banner" />
             <option value="$PROJECT_DIR$/base" />
             <option value="$PROJECT_DIR$/busCore" />
             <option value="$PROJECT_DIR$/http" />

+ 4 - 1
app/build.gradle

@@ -1,5 +1,7 @@
 apply plugin: 'com.android.application'
-
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+apply plugin: 'com.alibaba.arouter'
 android {
     compileSdkVersion 29
     buildToolsVersion "29.0.3"
@@ -43,4 +45,5 @@ dependencies {
     androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
 
     implementation project(path: ':busCore')
+    implementation "com.alibaba:arouter-api:1.5.2"
 }

+ 4 - 7
base/src/main/java/com/winhc/widget/BaseActivity.java

@@ -28,9 +28,6 @@ public abstract class BaseActivity<T extends IPresenter> extends AppCompatActivi
         beforeCreate();
         setContentView(initContentView());
         mPresenter = initPresenter();
-        if (mPresenter != null) {
-            mPresenter.attachView(this);
-        }
         initSystemBar();
         initView();
         initData(savedInstanceState);
@@ -44,7 +41,9 @@ public abstract class BaseActivity<T extends IPresenter> extends AppCompatActivi
     /**
      * 处理Window什么东西
      */
-    protected abstract void beforeCreate();
+    protected void beforeCreate() {
+
+    }
 
     /**
      * 默认的进入界面的动画
@@ -75,9 +74,7 @@ public abstract class BaseActivity<T extends IPresenter> extends AppCompatActivi
     @Override
     protected void onDestroy() {
         super.onDestroy();
-        if (mPresenter != null) {
-            mPresenter.detachView();
-        }
+        mPresenter = null;
         ActivityManageUtil
                 .getInstance()
                 .finishActivity(this)

+ 28 - 0
base/src/main/java/com/winhc/widget/ILifecyclePresenter.java

@@ -0,0 +1,28 @@
+package com.winhc.widget;
+
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleObserver;
+import android.arch.lifecycle.OnLifecycleEvent;
+
+/**
+ * Create by LZ at 2021/9/26
+ */
+public interface ILifecyclePresenter extends LifecycleObserver {
+    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
+    void onCreate();
+
+    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
+    void onDestroy();
+//    private WeakReference<V> mView;
+//
+//    public void attachView(V mRootView) {
+//        this.mView = new WeakReference<>(mRootView);
+//    }
+//
+//    public void detachView() {
+//        if (mView != null) {
+//            mView.clear();
+//            mView = null;
+//        }
+//    }
+}

+ 2 - 2
build.gradle

@@ -13,9 +13,9 @@ buildscript {
     }
     dependencies {
         classpath 'com.android.tools.build:gradle:3.4.1'
-
+        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"// add plugin
         classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.3'
-        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // add plugin
+        classpath "com.alibaba:arouter-register:1.0.2"
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
     }

+ 4 - 9
busCore/build.gradle

@@ -10,15 +10,6 @@ android {
         targetSdkVersion rootProject.ext.targetSdkVersion
         versionCode 1
         versionName "1.0"
-
-        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
-
-        javaCompileOptions {
-            annotationProcessorOptions {
-                arguments = [AROUTER_MODULE_NAME: project.getName()]
-            }
-        }
-//        buildConfigField "String", "SERVER_URL", "\"https://twww.winhc.net/api/\""
     }
     compileOptions {
         sourceCompatibility rootProject.ext.appSourceCompatibility
@@ -27,11 +18,15 @@ android {
     buildTypes {
         release {
             buildConfigField "String", "SERVER_URL", "\"https://gw.winhc.cn/\""
+            buildConfigField "String", "WEB_BASE_URL", "\"https://m.winhc.cn/wx-mobile/\""
+            buildConfigField "String", "ABTEST_URL_KEY", "\"351514AAFD18D4ACA7F59E51E42FAFAA03993919\""
             minifyEnabled true
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
         debug {
             buildConfigField "String", "SERVER_URL", "\"https://twww.winhc.net/api/\""
+            buildConfigField "String", "WEB_BASE_URL", "\"https://tm.winhc.net/wx-mobile/\""
+            buildConfigField "String", "ABTEST_URL_KEY", "\"B4DD742236B0DCFD18A4150664AA1374BFA36092\""
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }

+ 20 - 0
busCore/src/main/java/com/winhc/business/net/DefaultObserver.java

@@ -0,0 +1,20 @@
+package com.winhc.business.net;
+
+import com.winhc.business.builder.KProgressHudUtil;
+import com.winhc.http.HttpObserver;
+
+/**
+ * Create by LZ at 2021/10/13
+ */
+public abstract class DefaultObserver<T> extends HttpObserver<T> {
+    @Override
+    public void onHttpEnd() {
+        KProgressHudUtil.dismissProgressDialog();
+        KProgressHudUtil.dismissPollingDialog();
+    }
+
+    @Override
+    public void onTokenOutDate() {
+
+    }
+}

+ 136 - 0
busCore/src/main/java/com/winhc/business/widget/LineDecoration.java

@@ -0,0 +1,136 @@
+package com.winhc.business.widget;
+
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.ColorDrawable;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.OrientationHelper;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.StaggeredGridLayoutManager;
+import android.view.View;
+
+import com.jude.easyrecyclerview.adapter.RecyclerArrayAdapter;
+
+/**
+ * Create by LZ at 2021/10/13
+ */
+public class LineDecoration extends RecyclerView.ItemDecoration{
+    private ColorDrawable mColorDrawable;
+    private int mHeight;
+    private int mPaddingLeft;
+    private int mPaddingRight;
+    private boolean mDrawLastItem = true;
+    private boolean mDrawHeaderFooter = false;
+
+    public LineDecoration(int color, int height) {
+        this.mColorDrawable = new ColorDrawable(color);
+        this.mHeight = height;
+    }
+    public LineDecoration(int color, int height, int paddingLeft, int paddingRight) {
+        this.mColorDrawable = new ColorDrawable(color);
+        this.mHeight = height;
+        this.mPaddingLeft = paddingLeft;
+        this.mPaddingRight = paddingRight;
+    }
+
+    public void setDrawLastItem(boolean mDrawLastItem) {
+        this.mDrawLastItem = mDrawLastItem;
+    }
+
+    public void setDrawHeaderFooter(boolean mDrawHeaderFooter) {
+        this.mDrawHeaderFooter = mDrawHeaderFooter;
+    }
+
+    @Override
+    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+        int position = parent.getChildAdapterPosition(view);
+        int orientation = 0;
+        int headerCount = 0,footerCount = 0;
+        if (parent.getAdapter() instanceof RecyclerArrayAdapter){
+            headerCount = ((RecyclerArrayAdapter) parent.getAdapter()).getHeaderCount();
+            footerCount = ((RecyclerArrayAdapter) parent.getAdapter()).getFooterCount();
+        }
+
+        RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
+        if (layoutManager instanceof StaggeredGridLayoutManager){
+            orientation = ((StaggeredGridLayoutManager) layoutManager).getOrientation();
+        }else if (layoutManager instanceof GridLayoutManager){
+            orientation = ((GridLayoutManager) layoutManager).getOrientation();
+        }else if (layoutManager instanceof LinearLayoutManager){
+            orientation = ((LinearLayoutManager) layoutManager).getOrientation();
+        }
+
+        if (position>=headerCount&&position<parent.getAdapter().getItemCount()-footerCount||mDrawHeaderFooter){
+            if (orientation == OrientationHelper.VERTICAL){
+                outRect.bottom = mHeight;
+            }else {
+                outRect.right = mHeight;
+            }
+        }
+    }
+
+    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
+
+        if (parent.getAdapter() == null){
+            return;
+        }
+
+        int orientation = 0;
+        int headerCount = 0,footerCount = 0,dataCount;
+
+        if (parent.getAdapter() instanceof RecyclerArrayAdapter){
+            headerCount = ((RecyclerArrayAdapter) parent.getAdapter()).getHeaderCount();
+            footerCount = ((RecyclerArrayAdapter) parent.getAdapter()).getFooterCount();
+            dataCount = ((RecyclerArrayAdapter) parent.getAdapter()).getCount();
+        }else {
+            dataCount = parent.getAdapter().getItemCount();
+        }
+        int dataStartPosition = headerCount;
+        int dataEndPosition = headerCount+dataCount;
+
+
+        RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
+        if (layoutManager instanceof StaggeredGridLayoutManager){
+            orientation = ((StaggeredGridLayoutManager) layoutManager).getOrientation();
+        }else if (layoutManager instanceof GridLayoutManager){
+            orientation = ((GridLayoutManager) layoutManager).getOrientation();
+        }else if (layoutManager instanceof LinearLayoutManager){
+            orientation = ((LinearLayoutManager) layoutManager).getOrientation();
+        }
+        int start,end;
+        if (orientation == OrientationHelper.VERTICAL){
+            start = parent.getPaddingLeft() + mPaddingLeft;
+            end = parent.getWidth() - parent.getPaddingRight() - mPaddingRight;
+        }else {
+            start = parent.getPaddingTop() + mPaddingLeft;
+            end = parent.getHeight() - parent.getPaddingBottom() - mPaddingRight;
+        }
+
+        int childCount = parent.getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            View child = parent.getChildAt(i);
+            int position = parent.getChildAdapterPosition(child);
+
+            if (position>=dataStartPosition&&position<dataEndPosition-1//数据项除了最后一项
+                    ||(position == dataEndPosition-1&&mDrawLastItem)//数据项最后一项
+                    ||(!(position>=dataStartPosition&&position<dataEndPosition)&&mDrawHeaderFooter)//header&footer且可绘制
+            ){
+
+                if (orientation == OrientationHelper.VERTICAL){
+                    RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
+                    int top = child.getBottom() + params.bottomMargin;
+                    int bottom = top + mHeight;
+                    mColorDrawable.setBounds(start,top,end,bottom);
+                    mColorDrawable.draw(c);
+                }else {
+                    RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
+                    int left = child.getRight() + params.rightMargin;
+                    int right = left + mHeight;
+                    mColorDrawable.setBounds(left,start,right,end);
+                    mColorDrawable.draw(c);
+                }
+            }
+        }
+    }
+}

+ 25 - 27
busCore/src/main/java/com/winhc/business/widget/RightOperateDialog.java

@@ -3,6 +3,7 @@ package com.winhc.business.widget;
 import android.content.Context;
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
+import android.support.annotation.NonNull;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.view.Gravity;
@@ -12,19 +13,16 @@ import android.view.ViewGroup;
 import android.view.Window;
 import android.view.WindowManager;
 
-import com.jude.easyrecyclerview.decoration.DividerDecoration;
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
 import com.winhc.business.R;
 import com.winhc.business.builder.BaseDialog;
 import com.winhc.business.utils.NoDoubleClickUtils;
 import com.winhc.business.widget.bean.RightOperateBean;
-import com.winhc.widget.util.CollectionUtils;
 import com.winhc.widget.util.ScreenUtil;
 
 import java.util.ArrayList;
 
-import butterknife.BindView;
-import butterknife.ButterKnife;
-
 /**
  * 右上角操作弹框
  * create by toby
@@ -32,10 +30,9 @@ import butterknife.ButterKnife;
  */
 public class RightOperateDialog extends BaseDialog {
 
-    @BindView(R.id.operateRecycler)
-    RecyclerView operateRecycler;
+    RecyclerView base_recycler_view;
 
-    private RecyclerArrayAdapter<RightOperateBean> adapter;
+    private BaseQuickAdapter<RightOperateBean, BaseViewHolder> adapter;
     private ArrayList<RightOperateBean> rightOperateBeans;
     private OnDialogItemClickListener clickListener;
 
@@ -48,7 +45,7 @@ public class RightOperateDialog extends BaseDialog {
     @Override
     public View getView(Context context) {
         View view_pop = LayoutInflater.from(context).inflate(R.layout.pop_right_operate_dialog_layout, null);
-        ButterKnife.bind(this, view_pop);
+        base_recycler_view = view_pop.findViewById(R.id.base_recycler_view);
         initRecycler();
         return view_pop;
     }
@@ -76,36 +73,37 @@ public class RightOperateDialog extends BaseDialog {
         }
     }
 
-    private void initRecycler(){
-        operateRecycler.setLayoutManager(new LinearLayoutManager(mContext));
-        DividerDecoration decoration = new DividerDecoration(
+    private void initRecycler() {
+        base_recycler_view.setLayoutManager(new LinearLayoutManager(mContext));
+        LineDecoration decoration = new LineDecoration(
                 Color.parseColor("#242424"), ScreenUtil.dip2px(1), 0, 0);
         decoration.setDrawLastItem(false);
-        operateRecycler.addItemDecoration(decoration);
-        operateRecycler.setAdapterWithProgress(adapter = new RecyclerArrayAdapter<RightOperateBean>(mContext) {
+        base_recycler_view.addItemDecoration(decoration);
+        adapter = new BaseQuickAdapter<RightOperateBean, BaseViewHolder>(R.layout.item_dialog_right_operate, rightOperateBeans) {
             @Override
-            public BaseViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) {
-                return new RightOperateViewHolder(parent,mContext);
+            protected void convert(@NonNull BaseViewHolder baseViewHolder, RightOperateBean data) {
+                if (data != null) {
+                    baseViewHolder.setImageResource(R.id.imageView, data.getResId())
+                            .setText(R.id.operateName, data.getOperateName());
+                }
             }
-        });
-        adapter.setOnItemClickListener(new RecyclerArrayAdapter.OnItemClickListener() {
+        };
+        base_recycler_view.setAdapter(adapter);
+        adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
             @Override
-            public void onItemClick(int position) {
-                if (position > -1){
-                    if (!NoDoubleClickUtils.isDoubleClick()){
-                        if (null != clickListener) clickListener.onDialogItemClick(adapter.getItem(position).getCode());
+            public void onItemClick(BaseQuickAdapter baseQuickAdapter, View view, int position) {
+                if (position > -1) {
+                    if (!NoDoubleClickUtils.isDoubleClick()) {
+                        if (null != clickListener)
+                            clickListener.onDialogItemClick(adapter.getItem(position).getCode());
                         cancel();
                     }
                 }
             }
         });
-        if (!CollectionUtils.isEmpty(rightOperateBeans)) {
-            adapter.clear();
-            adapter.addAll(rightOperateBeans);
-        }
     }
 
-    public interface OnDialogItemClickListener{
+    public interface OnDialogItemClickListener {
         void onDialogItemClick(int code);
     }
 }

+ 23 - 0
busCore/src/main/res/layout/item_dialog_right_operate.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="52dp"
+    android:gravity="center"
+    android:orientation="horizontal">
+
+    <ImageView
+        android:id="@+id/imageView"
+        android:layout_width="@dimen/dp20"
+        android:layout_height="@dimen/dp20" />
+
+    <TextView
+        android:id="@+id/operateName"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:includeFontPadding="false"
+        android:text="删除账款"
+        android:textColor="@color/white"
+        android:textSize="@dimen/text_size_14" />
+
+</LinearLayout>

+ 4 - 6
busCore/src/main/res/layout/pop_right_operate_dialog_layout.xml

@@ -20,13 +20,11 @@
         android:layout_below="@+id/ivSanjiao"
         app:corner_radius="8dp"
         app:background_normal="#e6000000">
-
-        <com.jude.easyrecyclerview.EasyRecyclerView
-            android:id="@+id/operateRecycler"
-            android:layout_width="wrap_content"
+        <android.support.v7.widget.RecyclerView
+            android:id="@+id/base_recycler_view"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_marginStart="16dp"
-            android:layout_marginEnd="16dp"/>
+            android:layout_marginHorizontal="@dimen/dp16"/>
 
     </com.ruffian.library.widget.RLinearLayout>