Browse Source

封装网络请求以及负一屏效果实现

yanglei 8 months ago
parent
commit
1053bff5ff
52 changed files with 2672 additions and 8 deletions
  1. 11 0
      app/build.gradle
  2. 1 0
      app/src/main/AndroidManifest.xml
  3. 24 1
      app/src/main/java/com/xwkj/jcjcgz/app/GlobalHttpHandlerImpl.java
  4. 41 0
      app/src/main/java/com/xwkj/jcjcgz/di/component/GrzxComponent.java
  5. 41 0
      app/src/main/java/com/xwkj/jcjcgz/di/component/GztComponent.java
  6. 41 0
      app/src/main/java/com/xwkj/jcjcgz/di/component/LoginComponent.java
  7. 41 0
      app/src/main/java/com/xwkj/jcjcgz/di/component/RwzxComponent.java
  8. 30 0
      app/src/main/java/com/xwkj/jcjcgz/di/module/GrzxModule.java
  9. 30 0
      app/src/main/java/com/xwkj/jcjcgz/di/module/GztModule.java
  10. 30 0
      app/src/main/java/com/xwkj/jcjcgz/di/module/LoginModule.java
  11. 30 0
      app/src/main/java/com/xwkj/jcjcgz/di/module/RwzxModule.java
  12. 29 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/contract/GrzxContract.java
  13. 29 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/contract/GztContract.java
  14. 29 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/contract/LoginContract.java
  15. 29 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/contract/RwzxContract.java
  16. 46 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/model/GrzxModel.java
  17. 46 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/model/GztModel.java
  18. 46 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/model/LoginModel.java
  19. 46 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/model/RwzxModel.java
  20. 9 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/model/api/CommonInterFace.java
  21. 267 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/model/api/ReqToBus.java
  22. 16 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/model/api/service/ApiService.java
  23. 48 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/model/entity/AddressEntity.java
  24. 223 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/model/entity/BaseNetEntity.java
  25. 160 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/model/entity/BusEntity.java
  26. 53 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/presenter/GrzxPresenter.java
  27. 53 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/presenter/GztPresenter.java
  28. 53 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/presenter/LoginPresenter.java
  29. 53 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/presenter/RwzxPresenter.java
  30. 154 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/ui/activity/LoginActivity.java
  31. 198 5
      app/src/main/java/com/xwkj/jcjcgz/mvp/ui/activity/MainActivity.java
  32. 134 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/ui/fragment/GrzxFragment.java
  33. 134 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/ui/fragment/GztFragment.java
  34. 224 0
      app/src/main/java/com/xwkj/jcjcgz/mvp/ui/fragment/RwzxFragment.java
  35. 5 0
      app/src/main/res/color/color_st_home.xml
  36. BIN
      app/src/main/res/drawable-xxxhdpi/bj_blue.png
  37. BIN
      app/src/main/res/drawable-xxxhdpi/st_home_nor.png
  38. BIN
      app/src/main/res/drawable-xxxhdpi/st_home_sel.png
  39. BIN
      app/src/main/res/drawable-xxxhdpi/st_my_sel.png
  40. BIN
      app/src/main/res/drawable-xxxhdpi/st_wy_nor.png
  41. BIN
      app/src/main/res/drawable-xxxhdpi/st_xqgk_nor.png
  42. BIN
      app/src/main/res/drawable-xxxhdpi/st_xqgk_sel.png
  43. 8 0
      app/src/main/res/drawable/circle_white.xml
  44. 6 0
      app/src/main/res/drawable/selector_st_grzx.xml
  45. 6 0
      app/src/main/res/drawable/selector_st_home.xml
  46. 6 0
      app/src/main/res/drawable/selector_st_xqgk.xml
  47. 8 0
      app/src/main/res/layout/activity_login.xml
  48. 120 2
      app/src/main/res/layout/activity_main.xml
  49. 8 0
      app/src/main/res/layout/fragment_grzx.xml
  50. 8 0
      app/src/main/res/layout/fragment_gzt.xml
  51. 98 0
      app/src/main/res/layout/fragment_rwzx.xml
  52. BIN
      app/src/main/res/mipmap-xxxhdpi/bjtp.png

+ 11 - 0
app/build.gradle

@@ -155,6 +155,17 @@ dependencies {
     implementation 'com.google.android.material:material:1.1.0'
 
     implementation 'com.xm.permissions:XmPermissions:1.0.1'
+    implementation 'androidx.appcompat:appcompat:1.0.0'                 //必须 1.0.0 以上
+
+    implementation  'io.github.scwang90:refresh-layout-kernel:2.1.0'      //核心必须依赖
+    implementation  'io.github.scwang90:refresh-header-classics:2.1.0'    //经典刷新头
+    implementation  'io.github.scwang90:refresh-header-radar:2.1.0'       //雷达刷新头
+    implementation  'io.github.scwang90:refresh-header-falsify:2.1.0'     //虚拟刷新头
+    implementation  'io.github.scwang90:refresh-header-material:2.1.0'    //谷歌刷新头
+    implementation  'io.github.scwang90:refresh-header-two-level:2.1.0'   //二级刷新头
+    implementation  'io.github.scwang90:refresh-footer-ball:2.1.0'        //球脉冲加载
+    implementation  'io.github.scwang90:refresh-footer-classics:2.1.0'    //经典加载
+
 
 
 

+ 1 - 0
app/src/main/AndroidManifest.xml

@@ -17,6 +17,7 @@
         android:label="@string/app_name"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
+        <activity android:name=".mvp.ui.activity.LoginActivity" />
         <activity android:name=".mvp.ui.activity.MainActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />

+ 24 - 1
app/src/main/java/com/xwkj/jcjcgz/app/GlobalHttpHandlerImpl.java

@@ -1,9 +1,14 @@
 package com.xwkj.jcjcgz.app;
 
 import android.content.Context;
+import android.content.SharedPreferences;
+import android.text.TextUtils;
 
 import com.jess.arms.http.GlobalHttpHandler;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
 import okhttp3.Interceptor;
 import okhttp3.Request;
 import okhttp3.Response;
@@ -61,6 +66,24 @@ public class GlobalHttpHandlerImpl implements GlobalHttpHandler {
         /* 如果需要在请求服务器之前做一些操作, 则重新构建一个做过操作的 Request 并 return, 如增加 Header、Params 等请求信息, 不做操作则直接返回参数 request
         return chain.request().newBuilder().header("token", tokenId)
                               .build(); */
-        return request;
+        SharedPreferences sharedPreferences = context.getSharedPreferences("sys", Context.MODE_PRIVATE);
+        String appCredential = sharedPreferences.getString("appCredential", "");
+        String userCredential = sharedPreferences.getString("userCredential", "");
+        Request.Builder builder = chain.request().newBuilder();
+        if (!TextUtils.isEmpty(appCredential)) {
+            try {
+                builder.addHeader("appCredential", URLEncoder.encode(appCredential, "UTF-8"));
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        if (!TextUtils.isEmpty(userCredential)) {
+            try {
+                builder.addHeader("userCredential", URLEncoder.encode(userCredential, "UTF-8"));
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        return builder.build();
     }
 }

+ 41 - 0
app/src/main/java/com/xwkj/jcjcgz/di/component/GrzxComponent.java

@@ -0,0 +1,41 @@
+package com.xwkj.jcjcgz.di.component;
+
+import dagger.BindsInstance;
+import dagger.Component;
+
+import com.jess.arms.di.component.AppComponent;
+
+import com.xwkj.jcjcgz.di.module.GrzxModule;
+import com.xwkj.jcjcgz.mvp.contract.GrzxContract;
+
+import com.jess.arms.di.scope.FragmentScope;
+import com.xwkj.jcjcgz.mvp.ui.fragment.GrzxFragment;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:10
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@FragmentScope
+@Component(modules = GrzxModule.class, dependencies = AppComponent.class)
+public interface GrzxComponent {
+    void inject(GrzxFragment fragment);
+
+    @Component.Builder
+    interface Builder {
+        @BindsInstance
+        GrzxComponent.Builder view(GrzxContract.View view);
+
+        GrzxComponent.Builder appComponent(AppComponent appComponent);
+
+        GrzxComponent build();
+    }
+}

+ 41 - 0
app/src/main/java/com/xwkj/jcjcgz/di/component/GztComponent.java

@@ -0,0 +1,41 @@
+package com.xwkj.jcjcgz.di.component;
+
+import dagger.BindsInstance;
+import dagger.Component;
+
+import com.jess.arms.di.component.AppComponent;
+
+import com.xwkj.jcjcgz.di.module.GztModule;
+import com.xwkj.jcjcgz.mvp.contract.GztContract;
+
+import com.jess.arms.di.scope.FragmentScope;
+import com.xwkj.jcjcgz.mvp.ui.fragment.GztFragment;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:10
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@FragmentScope
+@Component(modules = GztModule.class, dependencies = AppComponent.class)
+public interface GztComponent {
+    void inject(GztFragment fragment);
+
+    @Component.Builder
+    interface Builder {
+        @BindsInstance
+        GztComponent.Builder view(GztContract.View view);
+
+        GztComponent.Builder appComponent(AppComponent appComponent);
+
+        GztComponent build();
+    }
+}

+ 41 - 0
app/src/main/java/com/xwkj/jcjcgz/di/component/LoginComponent.java

@@ -0,0 +1,41 @@
+package com.xwkj.jcjcgz.di.component;
+
+import dagger.BindsInstance;
+import dagger.Component;
+
+import com.jess.arms.di.component.AppComponent;
+
+import com.xwkj.jcjcgz.di.module.LoginModule;
+import com.xwkj.jcjcgz.mvp.contract.LoginContract;
+
+import com.jess.arms.di.scope.ActivityScope;
+import com.xwkj.jcjcgz.mvp.ui.activity.LoginActivity;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:59
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@ActivityScope
+@Component(modules = LoginModule.class, dependencies = AppComponent.class)
+public interface LoginComponent {
+    void inject(LoginActivity activity);
+
+    @Component.Builder
+    interface Builder {
+        @BindsInstance
+        LoginComponent.Builder view(LoginContract.View view);
+
+        LoginComponent.Builder appComponent(AppComponent appComponent);
+
+        LoginComponent build();
+    }
+}

+ 41 - 0
app/src/main/java/com/xwkj/jcjcgz/di/component/RwzxComponent.java

@@ -0,0 +1,41 @@
+package com.xwkj.jcjcgz.di.component;
+
+import dagger.BindsInstance;
+import dagger.Component;
+
+import com.jess.arms.di.component.AppComponent;
+
+import com.xwkj.jcjcgz.di.module.RwzxModule;
+import com.xwkj.jcjcgz.mvp.contract.RwzxContract;
+
+import com.jess.arms.di.scope.FragmentScope;
+import com.xwkj.jcjcgz.mvp.ui.fragment.RwzxFragment;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:09
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@FragmentScope
+@Component(modules = RwzxModule.class, dependencies = AppComponent.class)
+public interface RwzxComponent {
+    void inject(RwzxFragment fragment);
+
+    @Component.Builder
+    interface Builder {
+        @BindsInstance
+        RwzxComponent.Builder view(RwzxContract.View view);
+
+        RwzxComponent.Builder appComponent(AppComponent appComponent);
+
+        RwzxComponent build();
+    }
+}

+ 30 - 0
app/src/main/java/com/xwkj/jcjcgz/di/module/GrzxModule.java

@@ -0,0 +1,30 @@
+package com.xwkj.jcjcgz.di.module;
+
+import com.jess.arms.di.scope.FragmentScope;
+
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+
+import com.xwkj.jcjcgz.mvp.contract.GrzxContract;
+import com.xwkj.jcjcgz.mvp.model.GrzxModel;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:10
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@Module
+public abstract class GrzxModule {
+
+    @Binds
+    abstract GrzxContract.Model bindGrzxModel(GrzxModel model);
+}

+ 30 - 0
app/src/main/java/com/xwkj/jcjcgz/di/module/GztModule.java

@@ -0,0 +1,30 @@
+package com.xwkj.jcjcgz.di.module;
+
+import com.jess.arms.di.scope.FragmentScope;
+
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+
+import com.xwkj.jcjcgz.mvp.contract.GztContract;
+import com.xwkj.jcjcgz.mvp.model.GztModel;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:10
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@Module
+public abstract class GztModule {
+
+    @Binds
+    abstract GztContract.Model bindGztModel(GztModel model);
+}

+ 30 - 0
app/src/main/java/com/xwkj/jcjcgz/di/module/LoginModule.java

@@ -0,0 +1,30 @@
+package com.xwkj.jcjcgz.di.module;
+
+import com.jess.arms.di.scope.ActivityScope;
+
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+
+import com.xwkj.jcjcgz.mvp.contract.LoginContract;
+import com.xwkj.jcjcgz.mvp.model.LoginModel;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:59
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@Module
+public abstract class LoginModule {
+
+    @Binds
+    abstract LoginContract.Model bindLoginModel(LoginModel model);
+}

+ 30 - 0
app/src/main/java/com/xwkj/jcjcgz/di/module/RwzxModule.java

@@ -0,0 +1,30 @@
+package com.xwkj.jcjcgz.di.module;
+
+import com.jess.arms.di.scope.FragmentScope;
+
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+
+import com.xwkj.jcjcgz.mvp.contract.RwzxContract;
+import com.xwkj.jcjcgz.mvp.model.RwzxModel;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:09
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@Module
+public abstract class RwzxModule {
+
+    @Binds
+    abstract RwzxContract.Model bindRwzxModel(RwzxModel model);
+}

+ 29 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/contract/GrzxContract.java

@@ -0,0 +1,29 @@
+package com.xwkj.jcjcgz.mvp.contract;
+
+import com.jess.arms.mvp.IView;
+import com.jess.arms.mvp.IModel;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:10
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+public interface GrzxContract {
+    //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
+    interface View extends IView {
+
+    }
+
+    //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
+    interface Model extends IModel {
+
+    }
+}

+ 29 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/contract/GztContract.java

@@ -0,0 +1,29 @@
+package com.xwkj.jcjcgz.mvp.contract;
+
+import com.jess.arms.mvp.IView;
+import com.jess.arms.mvp.IModel;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:10
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+public interface GztContract {
+    //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
+    interface View extends IView {
+
+    }
+
+    //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
+    interface Model extends IModel {
+
+    }
+}

+ 29 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/contract/LoginContract.java

@@ -0,0 +1,29 @@
+package com.xwkj.jcjcgz.mvp.contract;
+
+import com.jess.arms.mvp.IView;
+import com.jess.arms.mvp.IModel;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:59
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+public interface LoginContract {
+    //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
+    interface View extends IView {
+
+    }
+
+    //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
+    interface Model extends IModel {
+
+    }
+}

+ 29 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/contract/RwzxContract.java

@@ -0,0 +1,29 @@
+package com.xwkj.jcjcgz.mvp.contract;
+
+import com.jess.arms.mvp.IView;
+import com.jess.arms.mvp.IModel;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:09
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+public interface RwzxContract {
+    //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
+    interface View extends IView {
+
+    }
+
+    //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
+    interface Model extends IModel {
+
+    }
+}

+ 46 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/model/GrzxModel.java

@@ -0,0 +1,46 @@
+package com.xwkj.jcjcgz.mvp.model;
+
+import android.app.Application;
+
+import com.google.gson.Gson;
+import com.jess.arms.integration.IRepositoryManager;
+import com.jess.arms.mvp.BaseModel;
+
+import com.jess.arms.di.scope.FragmentScope;
+
+import javax.inject.Inject;
+
+import com.xwkj.jcjcgz.mvp.contract.GrzxContract;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:10
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@FragmentScope
+public class GrzxModel extends BaseModel implements GrzxContract.Model {
+    @Inject
+    Gson mGson;
+    @Inject
+    Application mApplication;
+
+    @Inject
+    public GrzxModel(IRepositoryManager repositoryManager) {
+        super(repositoryManager);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        this.mGson = null;
+        this.mApplication = null;
+    }
+}

+ 46 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/model/GztModel.java

@@ -0,0 +1,46 @@
+package com.xwkj.jcjcgz.mvp.model;
+
+import android.app.Application;
+
+import com.google.gson.Gson;
+import com.jess.arms.integration.IRepositoryManager;
+import com.jess.arms.mvp.BaseModel;
+
+import com.jess.arms.di.scope.FragmentScope;
+
+import javax.inject.Inject;
+
+import com.xwkj.jcjcgz.mvp.contract.GztContract;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:10
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@FragmentScope
+public class GztModel extends BaseModel implements GztContract.Model {
+    @Inject
+    Gson mGson;
+    @Inject
+    Application mApplication;
+
+    @Inject
+    public GztModel(IRepositoryManager repositoryManager) {
+        super(repositoryManager);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        this.mGson = null;
+        this.mApplication = null;
+    }
+}

+ 46 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/model/LoginModel.java

@@ -0,0 +1,46 @@
+package com.xwkj.jcjcgz.mvp.model;
+
+import android.app.Application;
+
+import com.google.gson.Gson;
+import com.jess.arms.integration.IRepositoryManager;
+import com.jess.arms.mvp.BaseModel;
+
+import com.jess.arms.di.scope.ActivityScope;
+
+import javax.inject.Inject;
+
+import com.xwkj.jcjcgz.mvp.contract.LoginContract;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:59
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@ActivityScope
+public class LoginModel extends BaseModel implements LoginContract.Model {
+    @Inject
+    Gson mGson;
+    @Inject
+    Application mApplication;
+
+    @Inject
+    public LoginModel(IRepositoryManager repositoryManager) {
+        super(repositoryManager);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        this.mGson = null;
+        this.mApplication = null;
+    }
+}

+ 46 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/model/RwzxModel.java

@@ -0,0 +1,46 @@
+package com.xwkj.jcjcgz.mvp.model;
+
+import android.app.Application;
+
+import com.google.gson.Gson;
+import com.jess.arms.integration.IRepositoryManager;
+import com.jess.arms.mvp.BaseModel;
+
+import com.jess.arms.di.scope.FragmentScope;
+
+import javax.inject.Inject;
+
+import com.xwkj.jcjcgz.mvp.contract.RwzxContract;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:09
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@FragmentScope
+public class RwzxModel extends BaseModel implements RwzxContract.Model {
+    @Inject
+    Gson mGson;
+    @Inject
+    Application mApplication;
+
+    @Inject
+    public RwzxModel(IRepositoryManager repositoryManager) {
+        super(repositoryManager);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        this.mGson = null;
+        this.mApplication = null;
+    }
+}

+ 9 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/model/api/CommonInterFace.java

@@ -0,0 +1,9 @@
+package com.xwkj.jcjcgz.mvp.model.api;
+
+public interface CommonInterFace {
+    void onSuccess(String result);
+
+    void onError(Throwable throwable);
+
+    void onFinsh();
+}

+ 267 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/model/api/ReqToBus.java

@@ -0,0 +1,267 @@
+package com.xwkj.jcjcgz.mvp.model.api;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonObject;
+import com.hjq.toast.ToastUtils;
+import com.jess.arms.utils.ArmsUtils;
+import com.xwkj.jcjcgz.mvp.model.api.service.ApiService;
+import com.xwkj.jcjcgz.mvp.model.entity.AddressEntity;
+import com.xwkj.jcjcgz.mvp.model.entity.BaseNetEntity;
+import com.xwkj.jcjcgz.mvp.model.entity.BusEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.schedulers.Schedulers;
+import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
+import okhttp3.MediaType;
+import okhttp3.RequestBody;
+
+public class ReqToBus {
+    private Context context;
+    /*  private String reqKey;
+      private String reqValue;
+      private String dataObjId;*/
+    private SharedPreferences sp;
+    private static ReqToBus reqToBus;
+    private CommonInterFace interFace;
+
+    //初始化
+    public static synchronized ReqToBus getInstance() {
+        if (reqToBus == null) {
+            synchronized (ReqToBus.class) {
+                if (reqToBus == null) {
+                    reqToBus = new ReqToBus();
+                }
+            }
+        }
+        return reqToBus;
+    }
+
+    public ReqToBus init(Context context) {
+        this.context = context;
+        sp = context.getSharedPreferences("sys", Context.MODE_PRIVATE);
+        return this;
+    }
+
+    public void getRequestV2(Object reqValue, CommonInterFace interFace) {
+        // String url = "http://192.168.0.63:8090/jlyqfk/request/getData";
+        // String dataObjId="220000000000-3-0100-74b66b22b1524937ac713c10489a55fc";
+        String dataObjId = "220000000000-3-0100-5262bf9ccd72456e802fe9a0b77097e5";
+        //正式环境
+
+        String resourceList = sp.getString("resourceList", "[{\n" +
+                "\"resourceRegionalismCode\":\"120000000000\",\n" +
+                "\"resourceAddress\":\"http://20.3.1.162:9105/drs/ppc/v1/appQuery.do\",\n" +
+                "\"resourceId\":\"120000000000-3-0100-b0e037d83ecc4d43be788a5e9ddcbbe5\",\"resourceServiceType\":\"10\"\n" +
+                "}\n" +
+                "]");
+        List<AddressEntity> list = JSONObject.parseArray(resourceList, AddressEntity.class);
+        String url = "";
+        String resourceRegionalismCode = "";
+        for (int i = 0; i < list.size(); i++) {
+            AddressEntity addressEntity = list.get(i);
+            if (addressEntity.getResourceId().trim().equals(dataObjId.trim())) {
+                url = addressEntity.getResourceAddress();
+                resourceRegionalismCode = addressEntity.getResourceRegionalismCode();
+
+            }
+        }
+        String str = new Gson().toJson(reqValue);
+        String requstJson = getRequstJson1(url, str, dataObjId, resourceRegionalismCode);
+        System.out.println("dssd" + requstJson);
+        RequestBody requestBody = RequestBody.create(
+                MediaType.parse("application/json; charset=utf-8"),
+                requstJson
+        );
+        ArmsUtils.obtainAppComponentFromContext(context).repositoryManager()
+                .obtainRetrofitService(ApiService.class).getNetWork(url, requestBody)
+                .subscribeOn(Schedulers.io())
+                .doOnSubscribe(disposable -> {
+                    addDispose(disposable);//在订阅时必须调用这个方法,不然Activity退出时可能内存泄漏
+                })
+                .subscribeOn(AndroidSchedulers.mainThread())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new ErrorHandleSubscriber<JsonObject>(ArmsUtils.obtainAppComponentFromContext(context).rxErrorHandler()) {
+                    @Override
+                    public void onNext(JsonObject jsonObject) {
+                        String json = jsonObject.toString();
+                        BusEntity busEntity = new Gson().fromJson(json, BusEntity.class);
+                        String code = busEntity.getCode();
+                        if (code.equals("200")) {
+                            String value = busEntity.getData().getDataList().get(0).getFieldValues().get(0).getValue();
+
+                            interFace.onSuccess(value);
+                        } else {
+                            ToastUtils.show(busEntity.getMessage());
+                        }
+                    }
+
+                    @Override
+                    public void onError(Throwable t) {
+                        super.onError(t);
+                        interFace.onError(t);
+
+                    }
+
+                    @Override
+                    public void onComplete() {
+                        super.onComplete();
+                        interFace.onFinsh();
+
+                    }
+                });
+
+    }
+
+    public void getRequest(String url, Object reqValue, String dataObjId, CommonInterFace interFace) {
+
+        //正式环境
+
+        String resourceList = sp.getString("resourceList", "");
+        List<AddressEntity> list = JSONObject.parseArray(resourceList, AddressEntity.class);
+        /*String url = "";*/
+        String resourceRegionalismCode = "";
+        for (int i = 0; i < list.size(); i++) {
+            AddressEntity addressEntity = list.get(i);
+            if (addressEntity.getResourceId().trim().equals(dataObjId.trim())) {
+                url = addressEntity.getResourceAddress();
+                resourceRegionalismCode = addressEntity.getResourceRegionalismCode();
+
+            }
+        }
+        String str = new Gson().toJson(reqValue);
+        String requstJson = getRequstJson1(url, str, dataObjId, resourceRegionalismCode);
+        System.out.println("dssd" + requstJson);
+        RequestBody requestBody = RequestBody.create(
+                MediaType.parse("application/json; charset=utf-8"),
+                requstJson
+        );
+        ArmsUtils.obtainAppComponentFromContext(context).repositoryManager()
+                .obtainRetrofitService(ApiService.class).getNetWork(url, requestBody)
+                .subscribeOn(Schedulers.io())
+                .doOnSubscribe(disposable -> {
+                    addDispose(disposable);//在订阅时必须调用这个方法,不然Activity退出时可能内存泄漏
+                })
+                .subscribeOn(AndroidSchedulers.mainThread())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new ErrorHandleSubscriber<JsonObject>(ArmsUtils.obtainAppComponentFromContext(context).rxErrorHandler()) {
+                    @Override
+                    public void onNext(JsonObject jsonObject) {
+                        String json = jsonObject.toString();
+                        BusEntity busEntity = new Gson().fromJson(json, BusEntity.class);
+                        String code = busEntity.getCode();
+                        if (code.equals("200")) {
+                            String value = busEntity.getData().getDataList().get(0).getFieldValues().get(0).getValue();
+
+                            interFace.onSuccess(value);
+                        } else {
+                            ToastUtils.show(busEntity.getMessage());
+                        }
+                    }
+
+                    @Override
+                    public void onError(Throwable t) {
+                        super.onError(t);
+                        interFace.onError(t);
+
+                    }
+
+                    @Override
+                    public void onComplete() {
+                        super.onComplete();
+                        interFace.onFinsh();
+
+                    }
+                });
+
+    }
+
+    private CompositeDisposable mCompositeDisposable;
+
+    public void addDispose(Disposable disposable) {
+        if (mCompositeDisposable == null) {
+            mCompositeDisposable = new CompositeDisposable();
+        }
+        mCompositeDisposable.add(disposable);//将所有 Disposable 放入集中处理
+    }
+
+
+    public void unDispose() {
+
+        if (mCompositeDisposable != null) {
+            mCompositeDisposable.clear();//保证 Activity 结束时取消所有正在执行的订阅
+        }
+    }
+
+    public static String getRequstJson1(String reqKey, String reqValue, String dataObjId, String resourceRegionalismCode) {
+
+        BaseNetEntity entity = new BaseNetEntity();
+        entity.setMessageId(UUID.randomUUID().toString());
+        entity.setVersion("1.0");
+        BaseNetEntity.ParameterBean parameter = new BaseNetEntity.ParameterBean();
+        BaseNetEntity.ParameterBean.ConditionBean condition = new BaseNetEntity.ParameterBean.ConditionBean();
+        condition.setLogicalOperate("and");
+        List<BaseNetEntity.ParameterBean.ConditionBean.KeyValueListBean> list = new ArrayList<>();
+        BaseNetEntity.ParameterBean.ConditionBean.KeyValueListBean keyValueListBean = new BaseNetEntity.ParameterBean.ConditionBean.KeyValueListBean();
+        keyValueListBean.setKey("params");
+        keyValueListBean.setRelationOperator("=");
+        keyValueListBean.setValue(reqValue);
+        list.add(keyValueListBean);
+        condition.setKeyValueList(list);
+        parameter.setCondition(condition);
+        parameter.setDataObjId(dataObjId);
+        parameter.setFields("data");
+        parameter.setNetworkCode("3");
+        List<BaseNetEntity.ParameterBean.OrderByBean> data = new ArrayList<>();
+        parameter.setOrderBy(data);
+        BaseNetEntity.ParameterBean.PageBean page = new BaseNetEntity.ParameterBean.PageBean();
+        page.setPageNo(1);
+        page.setPageSize(1);
+        parameter.setPage(page);
+        parameter.setRegionalismCode(resourceRegionalismCode);
+        entity.setParameter(parameter);
+        String json = new GsonBuilder().disableHtmlEscaping().create().toJson(entity).toString();
+        return json;
+    }
+
+    public static String getRequstJson(String reqKey, Object reqValue, String dataObjId, String resourceRegionalismCode) {
+
+        BaseNetEntity entity = new BaseNetEntity();
+        entity.setMessageId(UUID.randomUUID().toString());
+        entity.setVersion("1.0");
+        BaseNetEntity.ParameterBean parameter = new BaseNetEntity.ParameterBean();
+        BaseNetEntity.ParameterBean.ConditionBean condition = new BaseNetEntity.ParameterBean.ConditionBean();
+        condition.setLogicalOperate("and");
+        List<BaseNetEntity.ParameterBean.ConditionBean.KeyValueListBean> list = new ArrayList<>();
+        BaseNetEntity.ParameterBean.ConditionBean.KeyValueListBean keyValueListBean = new BaseNetEntity.ParameterBean.ConditionBean.KeyValueListBean();
+        keyValueListBean.setKey("params");
+        keyValueListBean.setRelationOperator("=");
+        keyValueListBean.setValue(reqValue);
+        list.add(keyValueListBean);
+        condition.setKeyValueList(list);
+        parameter.setCondition(condition);
+        parameter.setDataObjId(dataObjId);
+        parameter.setFields("data");
+        parameter.setNetworkCode("3");
+        List<BaseNetEntity.ParameterBean.OrderByBean> data = new ArrayList<>();
+        parameter.setOrderBy(data);
+        BaseNetEntity.ParameterBean.PageBean page = new BaseNetEntity.ParameterBean.PageBean();
+        page.setPageNo(1);
+        page.setPageSize(1);
+        parameter.setPage(page);
+        parameter.setRegionalismCode(resourceRegionalismCode);
+        entity.setParameter(parameter);
+        String json = new GsonBuilder().disableHtmlEscaping().create().toJson(entity).toString();
+        return json;
+    }
+}

+ 16 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/model/api/service/ApiService.java

@@ -0,0 +1,16 @@
+package com.xwkj.jcjcgz.mvp.model.api.service;
+
+import com.google.gson.JsonObject;
+
+import io.reactivex.Observable;
+import okhttp3.RequestBody;
+import retrofit2.http.Body;
+import retrofit2.http.Headers;
+import retrofit2.http.POST;
+import retrofit2.http.Url;
+
+public interface ApiService {
+    @Headers({"Content-Type: application/json", "Accept: application/json"})//需要添加头
+    @POST
+    Observable<JsonObject> getNetWork(@Url String url, @Body RequestBody map);
+}

+ 48 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/model/entity/AddressEntity.java

@@ -0,0 +1,48 @@
+package com.xwkj.jcjcgz.mvp.model.entity;
+
+public class AddressEntity {
+
+    /**
+     * resourceRegionalismCode : 220000000000
+     * resourceAddress : http://20.25.0.5:8081/drs/ppc/v1/appQuery.do
+     * resourceId : 220000000000-3-0100-74b66b22b1524937ac713c10489a55fc
+     * resourceServiceType : 10
+     */
+
+    private String resourceRegionalismCode;
+    private String resourceAddress;
+    private String resourceId;
+    private String resourceServiceType;
+
+    public String getResourceRegionalismCode() {
+        return resourceRegionalismCode;
+    }
+
+    public void setResourceRegionalismCode(String resourceRegionalismCode) {
+        this.resourceRegionalismCode = resourceRegionalismCode;
+    }
+
+    public String getResourceAddress() {
+        return resourceAddress;
+    }
+
+    public void setResourceAddress(String resourceAddress) {
+        this.resourceAddress = resourceAddress;
+    }
+
+    public String getResourceId() {
+        return resourceId;
+    }
+
+    public void setResourceId(String resourceId) {
+        this.resourceId = resourceId;
+    }
+
+    public String getResourceServiceType() {
+        return resourceServiceType;
+    }
+
+    public void setResourceServiceType(String resourceServiceType) {
+        this.resourceServiceType = resourceServiceType;
+    }
+}

+ 223 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/model/entity/BaseNetEntity.java

@@ -0,0 +1,223 @@
+package com.xwkj.jcjcgz.mvp.model.entity;
+
+import java.util.List;
+
+public class BaseNetEntity {
+    private String messageId;
+    private String version;
+    private ParameterBean parameter;
+
+    public String getMessageId() {
+        return messageId;
+    }
+
+    public void setMessageId(String messageId) {
+        this.messageId = messageId;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public ParameterBean getParameter() {
+        return parameter;
+    }
+
+    public void setParameter(ParameterBean parameter) {
+        this.parameter = parameter;
+    }
+
+    public static class ParameterBean {
+        /**
+         * dataObjId : czrk
+         * regionalismCode :
+         * networkCode :
+         * condition : {"logicalOperate":"and","keyValueList":[{"key":"requestFlag","relationOperator":"=","value":"'张三'"},{"key":"userId","relationOperator":">","value":"20"},{"key":"clientBean","relationOperator":">","value":{"sfzh":"sdsd"}},{"key":"pageIndex","relationOperator":"不支持","value":"20"},{"key":"wybs","relationOperator":">","value":"uuid"},{"key":"locationlatitude","relationOperator":"不支持","value":"546465546.6554"},{"key":"locationlongitude","relationOperator":"不支持","value":"65546456"},{"key":"resultPageSize","relationOperator":"不支持","value":"45"}]}
+         * fields : name,age
+         * orderBy : [{"orderbyField":"name","sort":"desc"},{"orderbyField":"age","sort":"asc"}]
+         * page : {"pageSize":1,"pageNo":1}
+         */
+
+        private String dataObjId;
+        private String regionalismCode;
+        private String networkCode;
+        private ConditionBean condition;
+        private String fields;
+        private PageBean page;
+        private List<OrderByBean> orderBy;
+
+        public String getDataObjId() {
+            return dataObjId;
+        }
+
+        public void setDataObjId(String dataObjId) {
+            this.dataObjId = dataObjId;
+        }
+
+        public String getRegionalismCode() {
+            return regionalismCode;
+        }
+
+        public void setRegionalismCode(String regionalismCode) {
+            this.regionalismCode = regionalismCode;
+        }
+
+        public String getNetworkCode() {
+            return networkCode;
+        }
+
+        public void setNetworkCode(String networkCode) {
+            this.networkCode = networkCode;
+        }
+
+        public ConditionBean getCondition() {
+            return condition;
+        }
+
+        public void setCondition(ConditionBean condition) {
+            this.condition = condition;
+        }
+
+        public String getFields() {
+            return fields;
+        }
+
+        public void setFields(String fields) {
+            this.fields = fields;
+        }
+
+        public PageBean getPage() {
+            return page;
+        }
+
+        public void setPage(PageBean page) {
+            this.page = page;
+        }
+
+        public List<OrderByBean> getOrderBy() {
+            return orderBy;
+        }
+
+        public void setOrderBy(List<OrderByBean> orderBy) {
+            this.orderBy = orderBy;
+        }
+
+        public static class ConditionBean {
+            /**
+             * logicalOperate : and
+             * keyValueList : [{"key":"requestFlag","relationOperator":"=","value":"'张三'"},{"key":"userId","relationOperator":">","value":"20"},{"key":"clientBean","relationOperator":">","value":{"sfzh":"sdsd"}},{"key":"pageIndex","relationOperator":"不支持","value":"20"},{"key":"wybs","relationOperator":">","value":"uuid"},{"key":"locationlatitude","relationOperator":"不支持","value":"546465546.6554"},{"key":"locationlongitude","relationOperator":"不支持","value":"65546456"},{"key":"resultPageSize","relationOperator":"不支持","value":"45"}]
+             */
+
+            private String logicalOperate;
+            private List<KeyValueListBean> keyValueList;
+
+            public String getLogicalOperate() {
+                return logicalOperate;
+            }
+
+            public void setLogicalOperate(String logicalOperate) {
+                this.logicalOperate = logicalOperate;
+            }
+
+            public List<KeyValueListBean> getKeyValueList() {
+                return keyValueList;
+            }
+
+            public void setKeyValueList(List<KeyValueListBean> keyValueList) {
+                this.keyValueList = keyValueList;
+            }
+
+            public static class KeyValueListBean {
+                /**
+                 * key : requestFlag
+                 * relationOperator : =
+                 * value : '张三'
+                 */
+
+                private String key;
+                private String relationOperator;
+                private Object value;
+
+                public String getKey() {
+                    return key;
+                }
+
+                public void setKey(String key) {
+                    this.key = key;
+                }
+
+                public String getRelationOperator() {
+                    return relationOperator;
+                }
+
+                public void setRelationOperator(String relationOperator) {
+                    this.relationOperator = relationOperator;
+                }
+
+                public Object getValue() {
+                    return value;
+                }
+
+                public void setValue(Object value) {
+                    this.value = value;
+                }
+            }
+        }
+
+        public static class PageBean {
+            /**
+             * pageSize : 1
+             * pageNo : 1
+             */
+
+            private int pageSize;
+            private int pageNo;
+
+            public int getPageSize() {
+                return pageSize;
+            }
+
+            public void setPageSize(int pageSize) {
+                this.pageSize = pageSize;
+            }
+
+            public int getPageNo() {
+                return pageNo;
+            }
+
+            public void setPageNo(int pageNo) {
+                this.pageNo = pageNo;
+            }
+        }
+
+        public static class OrderByBean {
+            /**
+             * orderbyField : name
+             * sort : desc
+             */
+
+            private String orderbyField;
+            private String sort;
+
+            public String getOrderbyField() {
+                return orderbyField;
+            }
+
+            public void setOrderbyField(String orderbyField) {
+                this.orderbyField = orderbyField;
+            }
+
+            public String getSort() {
+                return sort;
+            }
+
+            public void setSort(String sort) {
+                this.sort = sort;
+            }
+        }
+    }
+}

+ 160 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/model/entity/BusEntity.java

@@ -0,0 +1,160 @@
+package com.xwkj.jcjcgz.mvp.model.entity;
+
+import java.util.List;
+
+public class BusEntity {
+
+    /**
+     * code : 200
+     * data : {"dataList":[{"fieldValues":[{"field":"data","value":"[{\"HH\":\"006199941\",\"SWRQ\":\"\",\"SJGSDWMC\":\"德惠市同太派出所\",\"ZZMMDM\":\"\",\"HLXDM\":\"10\",\"SQJCWHMC\":\"220183202013005\",\"XPurl\":\"http://10.107.1.198:5555/jlyqfk/static/idCardImg/220183199210222612.png.png\",\"DZMC\":\"同太乡西二道村后徐家屯7组\",\"ZH_SLSJ\":\"\",\"GZRYBZ\":\"\",\"MZDM\":\"\",\"ZH_GXSJ\":\"\",\"SSSXQ\":\"220100\",\"XZZ_MLPH\":\"\",\"CYM\":\"\",\"SLSJ\":\"20120817155421\",\"ZXRQ\":\"\",\"YHZGXDM\":\"22\",\"WFRYBZ\":\"\",\"SJJZDXX_DZMC\":\"\",\"XZZ_MLXXDZ\":\"\",\"XBDM\":\"1\",\"ZZCS\":\"\",\"HJDZ_DZMC\":\"\",\"FWCS\":\"同太乡西二道村小学\",\"XJGAJG_GAJGMC\":\"\",\"GZDXBZ\":\"\",\"HYZKDM\":\"10\",\"RYZT\":\"0\",\"SZZWBH\":\"\",\"ZJXYDM\":\"\",\"XB\":\"\",\"MZ\":\"\",\"BMCH\":\"\",\"CSRQ\":\"19921022\",\"HJDZ_XZQHDM\":\"220183\",\"LXDH\":\"\",\"gz\":\"\",\"GMSFHM\":\"220183199210222612\",\"XM\":\"杨磊\",\"ZP\":\"\",\"SSPCSMC\":\"\",\"SJJZDDDPCS_ZZJGDM\":\"\",\"JG_DZMC\":\"\"}]"}]}],"page":{"pageNo":1,"pageSize":1,"total":1}}
+     * message : OK
+     * messageId : 87582504-064b-42c1-893e-148f1e087b72
+     * version : 1.0
+     */
+
+    private String code;
+    private DataBean data;
+    private String message;
+    private String messageId;
+    private String version;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public DataBean getData() {
+        return data;
+    }
+
+    public void setData(DataBean data) {
+        this.data = data;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getMessageId() {
+        return messageId;
+    }
+
+    public void setMessageId(String messageId) {
+        this.messageId = messageId;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public static class DataBean {
+        /**
+         * dataList : [{"fieldValues":[{"field":"data","value":"[{\"HH\":\"006199941\",\"SWRQ\":\"\",\"SJGSDWMC\":\"德惠市同太派出所\",\"ZZMMDM\":\"\",\"HLXDM\":\"10\",\"SQJCWHMC\":\"220183202013005\",\"XPurl\":\"http://10.107.1.198:5555/jlyqfk/static/idCardImg/220183199210222612.png.png\",\"DZMC\":\"同太乡西二道村后徐家屯7组\",\"ZH_SLSJ\":\"\",\"GZRYBZ\":\"\",\"MZDM\":\"\",\"ZH_GXSJ\":\"\",\"SSSXQ\":\"220100\",\"XZZ_MLPH\":\"\",\"CYM\":\"\",\"SLSJ\":\"20120817155421\",\"ZXRQ\":\"\",\"YHZGXDM\":\"22\",\"WFRYBZ\":\"\",\"SJJZDXX_DZMC\":\"\",\"XZZ_MLXXDZ\":\"\",\"XBDM\":\"1\",\"ZZCS\":\"\",\"HJDZ_DZMC\":\"\",\"FWCS\":\"同太乡西二道村小学\",\"XJGAJG_GAJGMC\":\"\",\"GZDXBZ\":\"\",\"HYZKDM\":\"10\",\"RYZT\":\"0\",\"SZZWBH\":\"\",\"ZJXYDM\":\"\",\"XB\":\"\",\"MZ\":\"\",\"BMCH\":\"\",\"CSRQ\":\"19921022\",\"HJDZ_XZQHDM\":\"220183\",\"LXDH\":\"\",\"gz\":\"\",\"GMSFHM\":\"220183199210222612\",\"XM\":\"杨磊\",\"ZP\":\"\",\"SSPCSMC\":\"\",\"SJJZDDDPCS_ZZJGDM\":\"\",\"JG_DZMC\":\"\"}]"}]}]
+         * page : {"pageNo":1,"pageSize":1,"total":1}
+         */
+
+        private PageBean page;
+        private List<DataListBean> dataList;
+
+        public PageBean getPage() {
+            return page;
+        }
+
+        public void setPage(PageBean page) {
+            this.page = page;
+        }
+
+        public List<DataListBean> getDataList() {
+            return dataList;
+        }
+
+        public void setDataList(List<DataListBean> dataList) {
+            this.dataList = dataList;
+        }
+
+        public static class PageBean {
+            /**
+             * pageNo : 1
+             * pageSize : 1
+             * total : 1
+             */
+
+            private int pageNo;
+            private int pageSize;
+            private int total;
+
+            public int getPageNo() {
+                return pageNo;
+            }
+
+            public void setPageNo(int pageNo) {
+                this.pageNo = pageNo;
+            }
+
+            public int getPageSize() {
+                return pageSize;
+            }
+
+            public void setPageSize(int pageSize) {
+                this.pageSize = pageSize;
+            }
+
+            public int getTotal() {
+                return total;
+            }
+
+            public void setTotal(int total) {
+                this.total = total;
+            }
+        }
+
+        public static class DataListBean {
+            private List<FieldValuesBean> fieldValues;
+
+            public List<FieldValuesBean> getFieldValues() {
+                return fieldValues;
+            }
+
+            public void setFieldValues(List<FieldValuesBean> fieldValues) {
+                this.fieldValues = fieldValues;
+            }
+
+            public static class FieldValuesBean {
+                /**
+                 * field : data
+                 * value : [{"HH":"006199941","SWRQ":"","SJGSDWMC":"德惠市同太派出所","ZZMMDM":"","HLXDM":"10","SQJCWHMC":"220183202013005","XPurl":"http://10.107.1.198:5555/jlyqfk/static/idCardImg/220183199210222612.png.png","DZMC":"同太乡西二道村后徐家屯7组","ZH_SLSJ":"","GZRYBZ":"","MZDM":"","ZH_GXSJ":"","SSSXQ":"220100","XZZ_MLPH":"","CYM":"","SLSJ":"20120817155421","ZXRQ":"","YHZGXDM":"22","WFRYBZ":"","SJJZDXX_DZMC":"","XZZ_MLXXDZ":"","XBDM":"1","ZZCS":"","HJDZ_DZMC":"","FWCS":"同太乡西二道村小学","XJGAJG_GAJGMC":"","GZDXBZ":"","HYZKDM":"10","RYZT":"0","SZZWBH":"","ZJXYDM":"","XB":"","MZ":"","BMCH":"","CSRQ":"19921022","HJDZ_XZQHDM":"220183","LXDH":"","gz":"","GMSFHM":"220183199210222612","XM":"杨磊","ZP":"","SSPCSMC":"","SJJZDDDPCS_ZZJGDM":"","JG_DZMC":""}]
+                 */
+
+                private String field;
+                private String value;
+
+                public String getField() {
+                    return field;
+                }
+
+                public void setField(String field) {
+                    this.field = field;
+                }
+
+                public String getValue() {
+                    return value;
+                }
+
+                public void setValue(String value) {
+                    this.value = value;
+                }
+            }
+        }
+    }
+}

+ 53 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/presenter/GrzxPresenter.java

@@ -0,0 +1,53 @@
+package com.xwkj.jcjcgz.mvp.presenter;
+
+import android.app.Application;
+
+import com.jess.arms.integration.AppManager;
+import com.jess.arms.di.scope.FragmentScope;
+import com.jess.arms.mvp.BasePresenter;
+import com.jess.arms.http.imageloader.ImageLoader;
+
+import me.jessyan.rxerrorhandler.core.RxErrorHandler;
+
+import javax.inject.Inject;
+
+import com.xwkj.jcjcgz.mvp.contract.GrzxContract;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:10
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@FragmentScope
+public class GrzxPresenter extends BasePresenter<GrzxContract.Model, GrzxContract.View> {
+    @Inject
+    RxErrorHandler mErrorHandler;
+    @Inject
+    Application mApplication;
+    @Inject
+    ImageLoader mImageLoader;
+    @Inject
+    AppManager mAppManager;
+
+    @Inject
+    public GrzxPresenter(GrzxContract.Model model, GrzxContract.View rootView) {
+        super(model, rootView);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        this.mErrorHandler = null;
+        this.mAppManager = null;
+        this.mImageLoader = null;
+        this.mApplication = null;
+    }
+}

+ 53 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/presenter/GztPresenter.java

@@ -0,0 +1,53 @@
+package com.xwkj.jcjcgz.mvp.presenter;
+
+import android.app.Application;
+
+import com.jess.arms.integration.AppManager;
+import com.jess.arms.di.scope.FragmentScope;
+import com.jess.arms.mvp.BasePresenter;
+import com.jess.arms.http.imageloader.ImageLoader;
+
+import me.jessyan.rxerrorhandler.core.RxErrorHandler;
+
+import javax.inject.Inject;
+
+import com.xwkj.jcjcgz.mvp.contract.GztContract;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:10
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@FragmentScope
+public class GztPresenter extends BasePresenter<GztContract.Model, GztContract.View> {
+    @Inject
+    RxErrorHandler mErrorHandler;
+    @Inject
+    Application mApplication;
+    @Inject
+    ImageLoader mImageLoader;
+    @Inject
+    AppManager mAppManager;
+
+    @Inject
+    public GztPresenter(GztContract.Model model, GztContract.View rootView) {
+        super(model, rootView);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        this.mErrorHandler = null;
+        this.mAppManager = null;
+        this.mImageLoader = null;
+        this.mApplication = null;
+    }
+}

+ 53 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/presenter/LoginPresenter.java

@@ -0,0 +1,53 @@
+package com.xwkj.jcjcgz.mvp.presenter;
+
+import android.app.Application;
+
+import com.jess.arms.integration.AppManager;
+import com.jess.arms.di.scope.ActivityScope;
+import com.jess.arms.mvp.BasePresenter;
+import com.jess.arms.http.imageloader.ImageLoader;
+
+import me.jessyan.rxerrorhandler.core.RxErrorHandler;
+
+import javax.inject.Inject;
+
+import com.xwkj.jcjcgz.mvp.contract.LoginContract;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:59
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@ActivityScope
+public class LoginPresenter extends BasePresenter<LoginContract.Model, LoginContract.View> {
+    @Inject
+    RxErrorHandler mErrorHandler;
+    @Inject
+    Application mApplication;
+    @Inject
+    ImageLoader mImageLoader;
+    @Inject
+    AppManager mAppManager;
+
+    @Inject
+    public LoginPresenter(LoginContract.Model model, LoginContract.View rootView) {
+        super(model, rootView);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        this.mErrorHandler = null;
+        this.mAppManager = null;
+        this.mImageLoader = null;
+        this.mApplication = null;
+    }
+}

+ 53 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/presenter/RwzxPresenter.java

@@ -0,0 +1,53 @@
+package com.xwkj.jcjcgz.mvp.presenter;
+
+import android.app.Application;
+
+import com.jess.arms.integration.AppManager;
+import com.jess.arms.di.scope.FragmentScope;
+import com.jess.arms.mvp.BasePresenter;
+import com.jess.arms.http.imageloader.ImageLoader;
+
+import me.jessyan.rxerrorhandler.core.RxErrorHandler;
+
+import javax.inject.Inject;
+
+import com.xwkj.jcjcgz.mvp.contract.RwzxContract;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:09
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+@FragmentScope
+public class RwzxPresenter extends BasePresenter<RwzxContract.Model, RwzxContract.View> {
+    @Inject
+    RxErrorHandler mErrorHandler;
+    @Inject
+    Application mApplication;
+    @Inject
+    ImageLoader mImageLoader;
+    @Inject
+    AppManager mAppManager;
+
+    @Inject
+    public RwzxPresenter(RwzxContract.Model model, RwzxContract.View rootView) {
+        super(model, rootView);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        this.mErrorHandler = null;
+        this.mAppManager = null;
+        this.mImageLoader = null;
+        this.mApplication = null;
+    }
+}

+ 154 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/ui/activity/LoginActivity.java

@@ -0,0 +1,154 @@
+package com.xwkj.jcjcgz.mvp.ui.activity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.hjq.toast.ToastUtils;
+import com.jess.arms.base.BaseActivity;
+import com.jess.arms.di.component.AppComponent;
+import com.jess.arms.utils.ArmsUtils;
+
+import com.xwkj.jcjcgz.di.component.DaggerLoginComponent;
+import com.xwkj.jcjcgz.mvp.contract.LoginContract;
+import com.xwkj.jcjcgz.mvp.presenter.LoginPresenter;
+
+import com.xwkj.jcjcgz.R;
+import com.zkjc.common.base.ZkjcBaseActivity;
+
+
+import java.util.UUID;
+
+import static com.jess.arms.utils.Preconditions.checkNotNull;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:59
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+public class LoginActivity extends ZkjcBaseActivity<LoginPresenter> implements LoginContract.View {
+    private Handler handler = new Handler();
+
+    @Override
+    public void setupActivityComponent(@NonNull AppComponent appComponent) {
+        DaggerLoginComponent //如找不到该类,请编译一下项目
+                .builder()
+                .appComponent(appComponent)
+                .view(this)
+                .build()
+                .inject(this);
+    }
+
+    @Override
+    public int initView(@Nullable Bundle savedInstanceState) {
+        return R.layout.activity_login; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
+    }
+
+    @Override
+    public void initData(@Nullable Bundle savedInstanceState) {
+        onTime(0L);
+    }
+
+    private void onTime(long time) {
+
+        handler.postDelayed(() -> {
+            initXdjaReccvier();
+        }, time);
+    }
+
+    private void initXdjaReccvier() {
+        Uri uri = Uri.parse("content://com.ydjw.ua.getCredential");
+        Bundle pararms = new Bundle();
+        String paramsMessageId = UUID.randomUUID().toString();
+        pararms.putString("messageId", paramsMessageId);
+        pararms.putString("version", "1");
+        pararms.putString("appId", "220000000000-3-1-19f3ce6443964fb0825538b0d9e89c39");
+        pararms.putString("orgId", "220000000000");
+        pararms.putString("networkAreaCode", "3");
+        pararms.putString("packageName", "com.zkjc.sylzxtn");
+        Bundle bundle = getContentResolver().call(uri, "", null, pararms);
+        if (bundle == null) {
+            ToastUtils.show("获取应用凭证失败!!!");
+        }
+        String messageId = bundle.getString("messageId");
+        if (messageId.equals(paramsMessageId)) {
+            String userCredential = bundle.getString("userCredential");
+            String appCredential = bundle.getString("appCredential");
+            if (!TextUtils.isEmpty(userCredential) && !TextUtils.isEmpty(appCredential)) {
+                getAddress(appCredential, userCredential);
+            } else {
+                onTime(3000L);
+            }
+        }
+    }
+
+    private void getAddress(String appCredential, String userCredential) {
+        SharedPreferences sp = getSharedPreferences("sys", MODE_PRIVATE);
+        Uri uri = Uri.parse("content://com.ydjw.rsb.getResourceAddress");
+        Bundle pararms = new Bundle();
+        String paramsMessageId = UUID.randomUUID().toString();
+        pararms.putString("messageId", paramsMessageId);
+        pararms.putString("version", "1");
+        pararms.putString("appCredential", appCredential);
+        Bundle bundle = getContentResolver().call(uri, "", null, pararms);
+        if (bundle == null) {
+            ToastUtils.show("获取应用地址失败!!!");
+            return;
+        }
+        String messageId = bundle.getString("messageId");
+        if (messageId.equals(paramsMessageId)) {
+            String resourceList = bundle.getString("resourceList");
+            int code = bundle.getInt("resultCode");
+            if (code == 0) {
+                ToastUtils.show("寻址成功");
+                SharedPreferences.Editor edit = sp.edit();
+                edit.putString("appCredential", appCredential);
+                edit.putString("userCredential", userCredential);
+                edit.putString("resourceList", resourceList);
+                System.out.println("寻址" + resourceList);
+                edit.commit();
+            }
+        }
+    }
+
+    @Override
+    public void showLoading() {
+
+    }
+
+    @Override
+    public void hideLoading() {
+
+    }
+
+    @Override
+    public void showMessage(@NonNull String message) {
+        checkNotNull(message);
+        ArmsUtils.snackbarText(message);
+    }
+
+    @Override
+    public void launchActivity(@NonNull Intent intent) {
+        checkNotNull(intent);
+        ArmsUtils.startActivity(intent);
+    }
+
+    @Override
+    public void killMyself() {
+        finish();
+    }
+}

+ 198 - 5
app/src/main/java/com/xwkj/jcjcgz/mvp/ui/activity/MainActivity.java

@@ -1,21 +1,32 @@
 package com.xwkj.jcjcgz.mvp.ui.activity;
 
+import android.annotation.SuppressLint;
 import android.content.Intent;
 import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.fragment.app.FragmentTransaction;
 
-import com.jess.arms.base.BaseActivity;
+import com.hjq.toast.ToastUtils;
 import com.jess.arms.di.component.AppComponent;
 import com.jess.arms.utils.ArmsUtils;
-
+import com.xwkj.jcjcgz.R;
 import com.xwkj.jcjcgz.di.component.DaggerMainComponent;
 import com.xwkj.jcjcgz.mvp.contract.MainContract;
 import com.xwkj.jcjcgz.mvp.presenter.MainPresenter;
+import com.xwkj.jcjcgz.mvp.ui.fragment.GrzxFragment;
+import com.xwkj.jcjcgz.mvp.ui.fragment.GztFragment;
+import com.xwkj.jcjcgz.mvp.ui.fragment.RwzxFragment;
+import com.zkjc.common.base.ZkjcBaseActivity;
 
-import com.xwkj.jcjcgz.R;
-
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
 
 import static com.jess.arms.utils.Preconditions.checkNotNull;
 
@@ -32,7 +43,21 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
  * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
  * ================================================
  */
-public class MainActivity extends BaseActivity<MainPresenter> implements MainContract.View {
+public class MainActivity extends ZkjcBaseActivity<MainPresenter> implements MainContract.View {
+
+    @BindView(R.id.fl_container)
+    FrameLayout fl_container;
+    @BindView(R.id.ptsy)
+    FrameLayout ptsy;
+    @BindView(R.id.xqgk)
+    FrameLayout xqgk;
+    @BindView(R.id.grzx)
+    FrameLayout grzx;
+    @BindView(R.id.ll_main_tab)
+    LinearLayout ll_main_tab;
+    private RwzxFragment homeFragment;
+    private GztFragment xqGkFragment;
+    private GrzxFragment myFragment;
 
     @Override
     public void setupActivityComponent(@NonNull AppComponent appComponent) {
@@ -51,6 +76,173 @@ public class MainActivity extends BaseActivity<MainPresenter> implements MainCon
 
     @Override
     public void initData(@Nullable Bundle savedInstanceState) {
+        setListener();
+        onClickListener.onClick(ll_main_tab.getChildAt(0));
+    }
+
+
+
+    private void setListener() {
+        //所有孩子的数量
+        int childCount = ll_main_tab.getChildCount();
+        System.out.println("孩子的数量+" + childCount);
+        for (int i = 0; i < childCount; i++) {
+            FrameLayout childAt = (FrameLayout) ll_main_tab.getChildAt(i);
+            childAt.setOnClickListener(onClickListener);
+        }
+    }
+
+    private View.OnClickListener onClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            int index = 0;
+            index = ll_main_tab.indexOfChild(v);
+
+            //修改底部tab的ui
+            changeUi(index);
+            changeFragment(index);
+        }
+    };
+
+    private void changeFragment(int index) {
+        if (index == 0) {
+            setTabSelection(0);
+        } else if (index == 1) {
+            setTabSelection(1);
+        } else if (index == 2) {
+            setTabSelection(2);
+        }
+    }
+
+    /**
+     * 修改底部tab的按键
+     * g改变index对应的孩子的状态 包括这个孩子控件中的多有控件的状态(可用 不可用)
+     *
+     * @param index
+     */
+    public void changeUi(int index) {
+        //Toast.makeText(this,index+"",Toast.LENGTH_SHORT).show();
+
+        int childCount = ll_main_tab.getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            //判断i是否与index相同
+            //相同不可用状态enable=FALSE
+            if (i == index) {
+                ll_main_tab.getChildAt(i).setEnabled(false);
+                //每一个item控件都需要切换状态
+                setEnable(ll_main_tab.getChildAt(i), false);
+            } else {
+                ll_main_tab.getChildAt(i).setEnabled(true);
+                //每一个item控件都需要切换状态
+                setEnable(ll_main_tab.getChildAt(i), true);
+            }
+        }
+
+    }
+
+    /**
+     * 将每个item的控件一起改变状态
+     *
+     * @param item
+     * @param b
+     */
+    private void setEnable(View item, boolean b) {
+        item.setEnabled(b);
+        if (item instanceof ViewGroup) {
+            int childCount = ((ViewGroup) item).getChildCount();
+            for (int i = 0; i < childCount; i++) {
+                setEnable(((ViewGroup) item).getChildAt(i), b);
+            }
+        }
+    }
+
+    @OnClick({R.id.ptsy, R.id.xqgk, R.id.grzx})
+    public void onViewClicked(View view) {
+        switch (view.getId()) {
+            case R.id.ptsy:
+                setTabSelection(0);
+                break;
+            case R.id.xqgk:
+                setTabSelection(1);
+                break;
+            case R.id.grzx:
+                setTabSelection(2);
+                break;
+        }
+    }
+
+    public void setTabSelection(int index) {
+
+        // 开启一个Fragment事务
+        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
+        // 先隐藏掉所有的Fragment,
+        hideFragments(transaction);
+        switch (index) {
+
+
+            case 0:
+
+
+                if (homeFragment == null) {
+                    homeFragment = new RwzxFragment();
+                    transaction.add(R.id.fl_container, homeFragment);
+
+                } else {
+                    transaction.show(homeFragment);
+                }
+
+
+                break;
+
+            case 1:
+               // ToastUtils.show("功能开发中");
+                // warningCenterFragment = (WarningCenterFragment) getSupportFragmentManager().findFragmentByTag(WarningCenterFragment.TAG);
+                if (xqGkFragment == null) {
+                    xqGkFragment = new GztFragment();
+                    transaction.add(R.id.fl_container, xqGkFragment);
+
+                } else {
+                    transaction.show(xqGkFragment);
+                }
+                break;
+            case 2:
+                // warningCenterFragment = (WarningCenterFragment) getSupportFragmentManager().findFragmentByTag(WarningCenterFragment.TAG);
+                if (myFragment == null) {
+                    myFragment = new GrzxFragment();
+                    transaction.add(R.id.fl_container, myFragment);
+
+                } else {
+                    transaction.show(myFragment);
+                }
+                break;
+
+        }
+        transaction.commit();
+    }
+
+    @SuppressLint("MissingSuperCall")
+    @Override
+    protected void onSaveInstanceState(@NonNull Bundle outState) {
+
+        //  super.onSaveInstanceState(outState);
+    }
+
+    /**
+     * @param transaction
+     */
+    private void hideFragments(FragmentTransaction transaction) {
+
+        if (homeFragment != null) {
+            transaction.hide(homeFragment);
+        }
+        if (xqGkFragment != null) {
+            transaction.hide(xqGkFragment);
+        }
+
+        if (myFragment != null) {
+            transaction.hide(myFragment);
+        }
+
 
     }
 
@@ -80,4 +272,5 @@ public class MainActivity extends BaseActivity<MainPresenter> implements MainCon
     public void killMyself() {
         finish();
     }
+
 }

+ 134 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/ui/fragment/GrzxFragment.java

@@ -0,0 +1,134 @@
+package com.xwkj.jcjcgz.mvp.ui.fragment;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Message;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.jess.arms.base.BaseFragment;
+import com.jess.arms.di.component.AppComponent;
+import com.jess.arms.utils.ArmsUtils;
+
+import com.xwkj.jcjcgz.di.component.DaggerGrzxComponent;
+import com.xwkj.jcjcgz.mvp.contract.GrzxContract;
+import com.xwkj.jcjcgz.mvp.presenter.GrzxPresenter;
+
+import com.xwkj.jcjcgz.R;
+
+import static com.jess.arms.utils.Preconditions.checkNotNull;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:10
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+public class GrzxFragment extends BaseFragment<GrzxPresenter> implements GrzxContract.View {
+
+    public static GrzxFragment newInstance() {
+        GrzxFragment fragment = new GrzxFragment();
+        return fragment;
+    }
+
+    @Override
+    public void setupFragmentComponent(@NonNull AppComponent appComponent) {
+        DaggerGrzxComponent //如找不到该类,请编译一下项目
+                .builder()
+                .appComponent(appComponent)
+                .view(this)
+                .build()
+                .inject(this);
+    }
+
+    @Override
+    public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        return inflater.inflate(R.layout.fragment_grzx, container, false);
+    }
+
+    @Override
+    public void initData(@Nullable Bundle savedInstanceState) {
+
+    }
+
+    /**
+     * 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
+     * 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
+     * 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
+     * <p>
+     * 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
+     * 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
+     * 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
+     * <p>
+     * Example usage:
+     * <pre>
+     * public void setData(@Nullable Object data) {
+     *     if (data != null && data instanceof Message) {
+     *         switch (((Message) data).what) {
+     *             case 0:
+     *                 loadData(((Message) data).arg1);
+     *                 break;
+     *             case 1:
+     *                 refreshUI();
+     *                 break;
+     *             default:
+     *                 //do something
+     *                 break;
+     *         }
+     *     }
+     * }
+     *
+     * // call setData(Object):
+     * Message data = new Message();
+     * data.what = 0;
+     * data.arg1 = 1;
+     * fragment.setData(data);
+     * </pre>
+     *
+     * @param data 当不需要参数时 {@code data} 可以为 {@code null}
+     */
+    @Override
+    public void setData(@Nullable Object data) {
+
+    }
+
+    @Override
+    public void showLoading() {
+
+    }
+
+    @Override
+    public void hideLoading() {
+
+    }
+
+    @Override
+    public void showMessage(@NonNull String message) {
+        checkNotNull(message);
+        ArmsUtils.snackbarText(message);
+    }
+
+    @Override
+    public void launchActivity(@NonNull Intent intent) {
+        checkNotNull(intent);
+        ArmsUtils.startActivity(intent);
+    }
+
+    @Override
+    public void killMyself() {
+
+    }
+}

+ 134 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/ui/fragment/GztFragment.java

@@ -0,0 +1,134 @@
+package com.xwkj.jcjcgz.mvp.ui.fragment;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Message;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.jess.arms.base.BaseFragment;
+import com.jess.arms.di.component.AppComponent;
+import com.jess.arms.utils.ArmsUtils;
+
+import com.xwkj.jcjcgz.di.component.DaggerGztComponent;
+import com.xwkj.jcjcgz.mvp.contract.GztContract;
+import com.xwkj.jcjcgz.mvp.presenter.GztPresenter;
+
+import com.xwkj.jcjcgz.R;
+
+import static com.jess.arms.utils.Preconditions.checkNotNull;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:10
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+public class GztFragment extends BaseFragment<GztPresenter> implements GztContract.View {
+
+    public static GztFragment newInstance() {
+        GztFragment fragment = new GztFragment();
+        return fragment;
+    }
+
+    @Override
+    public void setupFragmentComponent(@NonNull AppComponent appComponent) {
+        DaggerGztComponent //如找不到该类,请编译一下项目
+                .builder()
+                .appComponent(appComponent)
+                .view(this)
+                .build()
+                .inject(this);
+    }
+
+    @Override
+    public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        return inflater.inflate(R.layout.fragment_gzt, container, false);
+    }
+
+    @Override
+    public void initData(@Nullable Bundle savedInstanceState) {
+
+    }
+
+    /**
+     * 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
+     * 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
+     * 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
+     * <p>
+     * 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
+     * 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
+     * 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
+     * <p>
+     * Example usage:
+     * <pre>
+     * public void setData(@Nullable Object data) {
+     *     if (data != null && data instanceof Message) {
+     *         switch (((Message) data).what) {
+     *             case 0:
+     *                 loadData(((Message) data).arg1);
+     *                 break;
+     *             case 1:
+     *                 refreshUI();
+     *                 break;
+     *             default:
+     *                 //do something
+     *                 break;
+     *         }
+     *     }
+     * }
+     *
+     * // call setData(Object):
+     * Message data = new Message();
+     * data.what = 0;
+     * data.arg1 = 1;
+     * fragment.setData(data);
+     * </pre>
+     *
+     * @param data 当不需要参数时 {@code data} 可以为 {@code null}
+     */
+    @Override
+    public void setData(@Nullable Object data) {
+
+    }
+
+    @Override
+    public void showLoading() {
+
+    }
+
+    @Override
+    public void hideLoading() {
+
+    }
+
+    @Override
+    public void showMessage(@NonNull String message) {
+        checkNotNull(message);
+        ArmsUtils.snackbarText(message);
+    }
+
+    @Override
+    public void launchActivity(@NonNull Intent intent) {
+        checkNotNull(intent);
+        ArmsUtils.startActivity(intent);
+    }
+
+    @Override
+    public void killMyself() {
+
+    }
+}

+ 224 - 0
app/src/main/java/com/xwkj/jcjcgz/mvp/ui/fragment/RwzxFragment.java

@@ -0,0 +1,224 @@
+package com.xwkj.jcjcgz.mvp.ui.fragment;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Message;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.ScrollView;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import com.jess.arms.base.BaseFragment;
+import com.jess.arms.di.component.AppComponent;
+import com.jess.arms.utils.ArmsUtils;
+import com.scwang.smart.refresh.header.ClassicsHeader;
+import com.scwang.smart.refresh.header.TwoLevelHeader;
+import com.scwang.smart.refresh.header.listener.OnTwoLevelListener;
+import com.scwang.smart.refresh.layout.SmartRefreshLayout;
+import com.scwang.smart.refresh.layout.api.RefreshLayout;
+import com.scwang.smart.refresh.layout.constant.RefreshState;
+import com.scwang.smart.refresh.layout.simple.SimpleMultiListener;
+import com.xwkj.jcjcgz.R;
+import com.xwkj.jcjcgz.di.component.DaggerRwzxComponent;
+import com.xwkj.jcjcgz.mvp.contract.RwzxContract;
+import com.xwkj.jcjcgz.mvp.model.api.CommonInterFace;
+import com.xwkj.jcjcgz.mvp.model.api.ReqToBus;
+import com.xwkj.jcjcgz.mvp.presenter.RwzxPresenter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import butterknife.BindView;
+
+import static com.jess.arms.utils.Preconditions.checkNotNull;
+
+
+/**
+ * ================================================
+ * Description:
+ * <p>
+ * Created by MVPArmsTemplate on 07/09/2024 14:09
+ * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
+ * <a href="https://github.com/JessYanCoding">Follow me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
+ * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
+ * ================================================
+ */
+public class RwzxFragment extends BaseFragment<RwzxPresenter> implements RwzxContract.View {
+
+    @BindView(R.id.second_floor)
+    ImageView secondFloor;
+    @BindView(R.id.second_floor_content)
+    RelativeLayout secondFloorContent;
+    @BindView(R.id.rl_back)
+    RelativeLayout rl_back;
+    @BindView(R.id.classics)
+    ClassicsHeader classics;
+    @BindView(R.id.header)
+    TwoLevelHeader header;
+    @BindView(R.id.contentPanel)
+    RelativeLayout contentPanel;
+    @BindView(R.id.scrollView)
+    ScrollView scrollView;
+    @BindView(R.id.refreshLayout)
+    SmartRefreshLayout refreshLayout;
+
+    public static RwzxFragment newInstance() {
+        RwzxFragment fragment = new RwzxFragment();
+        return fragment;
+    }
+
+    @Override
+    public void setupFragmentComponent(@NonNull AppComponent appComponent) {
+        DaggerRwzxComponent //如找不到该类,请编译一下项目
+                .builder()
+                .appComponent(appComponent)
+                .view(this)
+                .build()
+                .inject(this);
+    }
+
+    @Override
+    public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        return inflater.inflate(R.layout.fragment_rwzx, container, false);
+    }
+
+    @Override
+    public void initData(@Nullable Bundle savedInstanceState) {
+        refreshLayout.setOnMultiListener(new SimpleMultiListener() {
+            @Override
+            public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
+                Toast.makeText(getActivity(), "上拉加载", Toast.LENGTH_SHORT).show();
+                refreshLayout.finishLoadMore(2000);
+            }
+
+            @Override
+            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
+                Toast.makeText(getActivity(), "下拉刷新", Toast.LENGTH_SHORT).show();
+                refreshLayout.finishRefresh(2000);
+            }
+
+            @Override
+            public void onStateChanged(@NonNull RefreshLayout refreshLayout, @NonNull RefreshState oldState, @NonNull RefreshState newState) {
+                if (oldState == RefreshState.TwoLevel) {
+                    secondFloorContent.animate().alpha(0).setDuration(1000);
+                }
+            }
+        });
+
+
+        header.setOnTwoLevelListener(new OnTwoLevelListener() {
+            @Override
+            public boolean onTwoLevel(@NonNull RefreshLayout refreshLayout) {
+                Toast.makeText(getActivity(), "打开二楼", Toast.LENGTH_SHORT).show();
+                secondFloorContent.animate().alpha(1).setDuration(2000);
+                return true;
+            }
+        });
+        rl_back.setOnClickListener(v -> {
+            header.finishTwoLevel();
+        });
+        //网络请求示例
+        Map<String, String> map = new HashMap<>();
+        map.put("startTime", "77778787878787");
+        map.put("endTime", "545454545454545");
+        Map<String, Object> map1 = new HashMap<>();
+        map1.put("className", "appMenuController");
+        map1.put("methodName", "getsssj");
+        map1.put("params", map);
+        ReqToBus.getInstance().init(getActivity()).getRequestV2(map1, new CommonInterFace() {
+            @Override
+            public void onSuccess(String result) {
+
+            }
+
+            @Override
+            public void onError(Throwable throwable) {
+
+            }
+
+            @Override
+            public void onFinsh() {
+
+            }
+        });
+    }
+
+    /**
+     * 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
+     * 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
+     * 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
+     * <p>
+     * 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
+     * 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
+     * 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
+     * <p>
+     * Example usage:
+     * <pre>
+     * public void setData(@Nullable Object data) {
+     *     if (data != null && data instanceof Message) {
+     *         switch (((Message) data).what) {
+     *             case 0:
+     *                 loadData(((Message) data).arg1);
+     *                 break;
+     *             case 1:
+     *                 refreshUI();
+     *                 break;
+     *             default:
+     *                 //do something
+     *                 break;
+     *         }
+     *     }
+     * }
+     *
+     * // call setData(Object):
+     * Message data = new Message();
+     * data.what = 0;
+     * data.arg1 = 1;
+     * fragment.setData(data);
+     * </pre>
+     *
+     * @param data 当不需要参数时 {@code data} 可以为 {@code null}
+     */
+    @Override
+    public void setData(@Nullable Object data) {
+
+    }
+
+    @Override
+    public void showLoading() {
+
+    }
+
+    @Override
+    public void hideLoading() {
+
+    }
+
+    @Override
+    public void showMessage(@NonNull String message) {
+        checkNotNull(message);
+        ArmsUtils.snackbarText(message);
+    }
+
+    @Override
+    public void launchActivity(@NonNull Intent intent) {
+        checkNotNull(intent);
+        ArmsUtils.startActivity(intent);
+    }
+
+    @Override
+    public void killMyself() {
+
+    }
+}

+ 5 - 0
app/src/main/res/color/color_st_home.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:color="#ff000000" android:state_enabled="true"/>
+    <item android:color="#106DFF" android:state_enabled="false"/>
+</selector>

BIN
app/src/main/res/drawable-xxxhdpi/bj_blue.png


BIN
app/src/main/res/drawable-xxxhdpi/st_home_nor.png


BIN
app/src/main/res/drawable-xxxhdpi/st_home_sel.png


BIN
app/src/main/res/drawable-xxxhdpi/st_my_sel.png


BIN
app/src/main/res/drawable-xxxhdpi/st_wy_nor.png


BIN
app/src/main/res/drawable-xxxhdpi/st_xqgk_nor.png


BIN
app/src/main/res/drawable-xxxhdpi/st_xqgk_sel.png


+ 8 - 0
app/src/main/res/drawable/circle_white.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <stroke android:color="@color/white">
+
+    </stroke>
+    <solid android:color="@color/white" />
+</shape>

+ 6 - 0
app/src/main/res/drawable/selector_st_grzx.xml

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

+ 6 - 0
app/src/main/res/drawable/selector_st_home.xml

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

+ 6 - 0
app/src/main/res/drawable/selector_st_xqgk.xml

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

+ 8 - 0
app/src/main/res/layout/activity_login.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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">
+
+</LinearLayout>

+ 120 - 2
app/src/main/res/layout/activity_main.xml

@@ -1,8 +1,126 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout 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"
+    android:background="#f5f5f5"
+    android:clipChildren="false"
     android:orientation="vertical">
 
-</LinearLayout>
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="150dp"
+        android:background="@drawable/bj_blue">
+
+    </FrameLayout>
+    <LinearLayout
+        android:clipChildren="false"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <FrameLayout
+            android:id="@+id/fl_container"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1" />
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+        </LinearLayout>
+        <LinearLayout
+
+            android:id="@+id/ll_main_tab"
+            android:layout_width="match_parent"
+            android:layout_height="62dp"
+            android:layout_alignParentBottom="true"
+            android:background="#FFFFFF"
+            android:orientation="horizontal">
+
+            <FrameLayout
+                android:id="@+id/ptsy"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="1">
+
+                <ImageView
+                    android:layout_width="25dp"
+                    android:layout_height="25dp"
+                    android:layout_gravity="center|top"
+                    android:layout_marginTop="10dp"
+                    android:src="@drawable/selector_st_home" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="bottom|center"
+                    android:layout_marginTop="5dp"
+                    android:layout_marginBottom="5dp"
+                    android:gravity="center"
+                    android:text="首页"
+                    android:textColor="@color/color_st_home"
+                    android:textSize="10sp" />
+            </FrameLayout>
+
+            <FrameLayout
+                android:id="@+id/xqgk"
+                android:layout_width="75dp"
+                android:layout_height="76dp"
+                android:layout_gravity="bottom"
+                android:background="@drawable/circle_white">
+
+                <ImageView
+
+                    android:layout_width="40dp"
+                    android:layout_height="40dp"
+                    android:layout_gravity="center|top"
+                    android:layout_marginTop="8dp"
+                    android:src="@drawable/selector_st_xqgk" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="bottom|center"
+                    android:layout_marginTop="5dp"
+                    android:layout_marginBottom="5dp"
+                    android:gravity="center"
+                    android:text="辖区概况"
+                    android:textColor="@color/color_st_home"
+                    android:textSize="10sp" />
+
+            </FrameLayout>
+
+            <FrameLayout
+                android:id="@+id/grzx"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="1">
+
+                <ImageView
+                    android:layout_width="25dp"
+                    android:layout_height="25dp"
+                    android:layout_gravity="center|top"
+                    android:layout_marginTop="10dp"
+                    android:src="@drawable/selector_st_grzx" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="bottom|center"
+                    android:layout_marginTop="5dp"
+                    android:layout_marginBottom="5dp"
+                    android:gravity="center"
+                    android:text="我的"
+                    android:textColor="@color/color_st_home"
+                    android:textSize="10sp" />
+            </FrameLayout>
+
+        </LinearLayout>
+    </LinearLayout>
+
+
+
+</RelativeLayout>

+ 8 - 0
app/src/main/res/layout/fragment_grzx.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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">
+
+</LinearLayout>

+ 8 - 0
app/src/main/res/layout/fragment_gzt.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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">
+
+</LinearLayout>

+ 98 - 0
app/src/main/res/layout/fragment_rwzx.xml

@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout 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"
+    android:orientation="vertical">
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/refreshLayout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:clipChildren="false"
+        app:srlAccentColor="@color/white">
+
+        <com.scwang.smart.refresh.header.TwoLevelHeader
+            android:id="@+id/header"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <ImageView
+                android:id="@+id/second_floor"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:contentDescription="@string/app_name"
+                android:scaleType="centerCrop"
+                android:src="@mipmap/bjtp" />
+
+            <RelativeLayout
+                android:id="@+id/second_floor_content"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:alpha="0"
+                android:background="#fff"
+                android:orientation="vertical">
+
+                <com.zkjc.common.view.CommonTitleBarV3
+                    android:id="@+id/title_bar"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="25dp" />
+
+                <RelativeLayout
+                    android:id="@+id/rl_back"
+                    android:layout_width="match_parent"
+                    android:layout_height="70dp"
+                    android:background="#E8C591"
+                    android:layout_alignParentBottom="true">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="15dp"
+                        android:layout_centerHorizontal="true"
+                        android:text="返回首页"
+                        android:textColor="#190505"
+                        android:textSize="20sp" />
+                </RelativeLayout>
+            </RelativeLayout>
+
+            <com.scwang.smart.refresh.header.ClassicsHeader
+                android:id="@+id/classics"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" />
+        </com.scwang.smart.refresh.header.TwoLevelHeader>
+
+        <ScrollView
+            android:id="@+id/scrollView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="#fff"
+            android:fillViewport="true"
+            android:overScrollMode="never"
+           >
+
+            <RelativeLayout
+                android:id="@+id/contentPanel"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:adjustViewBounds="true"
+                    android:contentDescription="@string/app_name"
+                    android:gravity="center"
+                    android:text="内容主题"
+                    android:textColor="#000"
+                    android:textSize="20dp" />
+
+            </RelativeLayout>
+        </ScrollView>
+
+        <com.scwang.smart.refresh.header.ClassicsHeader
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+</FrameLayout>

BIN
app/src/main/res/mipmap-xxxhdpi/bjtp.png