diff --git a/.idea/misc.xml b/.idea/misc.xml
index 37a7509..7bfef59 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">
diff --git a/app/build.gradle b/app/build.gradle
index f984193..1acd626 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,10 +20,19 @@ android {
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
     }
+
+    compileOptions {
+
+        sourceCompatibility JavaVersion.VERSION_1_8
+
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+
 }
 
 
-dependencies {
+
+    dependencies {
     implementation fileTree(dir: "libs", include: ["*.jar"])
     implementation 'androidx.appcompat:appcompat:1.1.0'
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
@@ -34,8 +43,13 @@ dependencies {
     androidTestImplementation 'androidx.test.ext:junit:1.1.1'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
     //butterknife依赖
-    implementation 'com.jakewharton:butterknife:8.8.1'
-    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
+    implementation 'com.jakewharton:butterknife:10.2.1'
+    annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'
+    //状态栏侵染
+
+    // 基础依赖包,必须要依赖
+    implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
+    implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0'
 
 
     //网络框架
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 40f8188..3705ad7 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,7 +8,7 @@
         android:label="@string/app_name"
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
-        android:theme="@style/AppTheme">
+        android:theme="@style/AppTheme.NoActionBar">
         <activity android:name=".activity.HomeActivity"></activity>
         <activity android:name=".activity.MainActivity">
             <intent-filter>
@@ -17,6 +17,7 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+        <activity android:name=".activity.LoginActivity"></activity>
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/activity/HomeActivity.java b/app/src/main/java/com/example/myapplication/activity/HomeActivity.java
index 99bda04..68b1a20 100644
--- a/app/src/main/java/com/example/myapplication/activity/HomeActivity.java
+++ b/app/src/main/java/com/example/myapplication/activity/HomeActivity.java
@@ -1,19 +1,40 @@
 package com.example.myapplication.activity;
 
-import android.os.Bundle;
+
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TableLayout;
+import android.widget.TextView;
+
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentPagerAdapter;
 
 import com.example.myapplication.base.BaseActivity;
-import com.google.android.material.floatingactionbutton.FloatingActionButton;
-import com.google.android.material.snackbar.Snackbar;
 
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
-
-import android.view.View;
 
 import com.example.myapplication.R;
+import com.example.myapplication.fragment.FindFragment;
+import com.example.myapplication.fragment.MineFragment;
+import com.example.myapplication.fragment.RecordFragment;
+import com.example.myapplication.fragment.TreasureFragment;
+import com.example.myapplication.util.NoSlideViewPager;
+import com.google.android.material.tabs.TabLayout;
+import com.gyf.immersionbar.ImmersionBar;
 
+import java.util.ArrayList;
+
+/**
+ * 创建首页布局展示
+ */
 public class HomeActivity extends BaseActivity {
+    private NoSlideViewPager mViewPager;
+    private TabLayout mTab;
+    private final String[] name = {"寻宝", "记录", "发现", "我的"};
+    private final int[] pic = {R.mipmap.map_select,R.mipmap.task_select,R.mipmap.article_select,R.mipmap.mine_select};
+    private final int[] pic1 = {R.mipmap.map,R.mipmap.task,R.mipmap.article,R.mipmap.mine};
+
     @Override
     protected int getLayout() {
         return R.layout.activity_home;
@@ -22,8 +43,62 @@ public class HomeActivity extends BaseActivity {
     @Override
     protected void initView() {
         super.initView();
-    }
+        ImmersionBar.with(this)
+                .statusBarDarkFont(true, 0.2f)
+                //原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色,如果当前设备不支持状态栏字体变色,会使当前状态栏加上透明度,否则不执行透明度
+                .init();
+        mTab=findViewById(R.id.tab_layout);
+        mViewPager=findViewById(R.id.no_slide_view_pager);
+        ArrayList<Fragment> fragments = new ArrayList<>();
+        fragments.add(new TreasureFragment());
+        fragments.add(new RecordFragment());
+        fragments.add(new FindFragment());
+        fragments.add(new MineFragment());
 
+        mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
+            @Override
+            public Fragment getItem(int i) {
+                return fragments.get(i);
+            }
+
+            @Override
+            public int getCount() {
+                return fragments.size();
+            }
+        });
+        mTab.setupWithViewPager(mViewPager);
+        mTab.getTabAt(0).setText(name[0]).setIcon(pic[0]);
+        mTab.getTabAt(1).setText(name[1]).setIcon(pic1[1]);
+        mTab.getTabAt(2).setText(name[2]).setIcon(pic1[2]);
+        mTab.getTabAt(3).setText(name[3]).setIcon(pic1[3]);
+        mTab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
+            //禁止table layout效果
+            @Override
+            public void onTabSelected(TabLayout.Tab tab) {
+                mTab.getTabAt(tab.getPosition()).setIcon(pic[tab.getPosition()]);
+            }
+
+            //点击table layout效果
+            @Override
+            public void onTabUnselected(TabLayout.Tab tab) {
+                mTab.getTabAt(tab.getPosition()).setIcon(pic1[tab.getPosition()]);
+            }
+
+            @Override
+            public void onTabReselected(TabLayout.Tab tab) {
+
+            }
+        });
+
+    }
+    public View getTabView(String name,int image) {
+        View view = LayoutInflater.from(this).inflate(R.layout.item_tab, null);
+        TextView txt_title = (TextView) view.findViewById(R.id.txt_title);
+        txt_title.setText(name);
+        ImageView img_title = (ImageView) view.findViewById(R.id.img_title);
+        img_title.setImageResource(image);
+        return view;
+    }
     @Override
     protected void initData() {
         super.initData();
diff --git a/app/src/main/java/com/example/myapplication/activity/LoginActivity.java b/app/src/main/java/com/example/myapplication/activity/LoginActivity.java
new file mode 100644
index 0000000..7a15517
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/activity/LoginActivity.java
@@ -0,0 +1,24 @@
+package com.example.myapplication.activity;
+
+import com.example.myapplication.R;
+import com.example.myapplication.base.BaseActivity;
+
+/**
+ * 登录页
+ */
+public class LoginActivity extends BaseActivity {
+    @Override
+    protected int getLayout() {
+        return R.layout.login_activity;
+    }
+
+    @Override
+    protected void initData() {
+        super.initData();
+    }
+
+    @Override
+    protected void initView() {
+        super.initView();
+    }
+}
diff --git a/app/src/main/java/com/example/myapplication/activity/MainActivity.java b/app/src/main/java/com/example/myapplication/activity/MainActivity.java
index 6983698..f928f9e 100644
--- a/app/src/main/java/com/example/myapplication/activity/MainActivity.java
+++ b/app/src/main/java/com/example/myapplication/activity/MainActivity.java
@@ -2,11 +2,21 @@ package com.example.myapplication.activity;
 
 import androidx.appcompat.app.AppCompatActivity;
 
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Build;
 import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
 
 import com.example.myapplication.R;
 import com.example.myapplication.base.BaseActivity;
 
+/**
+ * 启动页
+ */
 public class MainActivity extends BaseActivity {
 
     @Override
@@ -17,6 +27,19 @@ public class MainActivity extends BaseActivity {
     @Override
     protected void initData() {
         super.initData();
+        new CountDownTimer(3000, 1000) {
+            @Override
+            public void onTick(long l) {
+            }
+
+            @Override
+            public void onFinish() {
+                Intent intent = new Intent(MainActivity.this, HomeActivity.class);
+                startActivity(intent);
+                finish();
+            }
+        }.start();
+
     }
 
     @Override
diff --git a/app/src/main/java/com/example/myapplication/activity/ManagementFragment.java b/app/src/main/java/com/example/myapplication/activity/ManagementFragment.java
new file mode 100644
index 0000000..4176a18
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/activity/ManagementFragment.java
@@ -0,0 +1,130 @@
+package com.example.myapplication.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.KeyEvent;
+
+import com.example.myapplication.R;
+import com.example.myapplication.base.BaseActivity;
+import com.example.myapplication.fragment.FindFragment;
+import com.example.myapplication.fragment.MineFragment;
+import com.example.myapplication.fragment.RecordFragment;
+import com.example.myapplication.fragment.TreasureFragment;
+import com.gyf.immersionbar.ImmersionBar;
+
+
+import androidx.annotation.Nullable;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
+/**
+ * fragment 管理作用:
+ */
+
+public class ManagementFragment extends BaseActivity {
+    private FragmentManager fragmentManager;
+    private int fourthly_tag;
+    private MineFragment mineFragment;//我的fragment
+    private FindFragment findFragment;//发现的fragment
+    private RecordFragment recordFragment;//纪录的fragment
+    private TreasureFragment treasureFragment;//寻宝的fragment
+
+
+    @Override
+    protected int getLayout() {
+        return R.layout.management_fragment;
+    }
+
+    @Override
+    protected void initView() {
+        super.initView();
+        fourthly_tag = getIntent().getIntExtra("tag", 0);
+        fragmentManager = getSupportFragmentManager();
+        if (fourthly_tag != 0) {
+            selectorFragment(fourthly_tag);
+        }
+        setZtlTextColor();
+    }
+
+    //隐藏所有Fragment
+    private void hideAllFragment(FragmentTransaction fragmentTransaction) {
+        if (mineFragment != null)
+            fragmentTransaction.hide(mineFragment);
+        if (findFragment != null)
+            fragmentTransaction.hide(findFragment);
+        if (recordFragment != null)
+            fragmentTransaction.hide(recordFragment);
+        if (treasureFragment != null)
+            fragmentTransaction.hide(treasureFragment);
+    }
+
+    public void selectorFragment(int i) {
+        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
+        hideAllFragment(fragmentTransaction);
+        switch (i) {
+            case 1:
+                if (mineFragment == null) {
+                    mineFragment = new MineFragment();
+                    fragmentTransaction.add(R.id.frame_layout, mineFragment);
+                } else {
+                    fragmentTransaction.show(mineFragment);
+                }
+/*              Bundle bundle1 = new Bundle();
+                bundle1.putString("grad", getIntent().getStringExtra("grad"));
+                mineFragment.setArguments(bundle1);*/
+                break;
+            case 2:
+                if (findFragment == null) {
+                    findFragment = new FindFragment();
+                    fragmentTransaction.add(R.id.frame_layout, findFragment);
+                } else {
+                    fragmentTransaction.show(findFragment);
+                }
+                break;
+            case 3:
+                if (recordFragment == null) {
+                    recordFragment = new RecordFragment();
+                    fragmentTransaction.add(R.id.frame_layout, recordFragment);
+                } else {
+                    fragmentTransaction.show(recordFragment);
+                }
+                break;
+            case 4:
+                if (treasureFragment == null) {
+                    treasureFragment = new TreasureFragment();
+                    fragmentTransaction.add(R.id.frame_layout, treasureFragment);
+                } else {
+                    fragmentTransaction.show(treasureFragment);
+                }
+                break;
+        }
+        fragmentTransaction.commit();
+
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        switch (fourthly_tag) {
+            case 1:
+                mineFragment.onActivityResult(requestCode, resultCode, data);
+                break;
+            case 2:
+                findFragment.onActivityResult(requestCode, resultCode, data);
+                break;
+            case 3:
+                recordFragment.onActivityResult(requestCode, resultCode, data);
+                break;
+            case 4:
+                treasureFragment.onActivityResult(requestCode, resultCode, data);
+                break;
+
+        }
+    }
+    private void setZtlTextColor() {
+        ImmersionBar.with(this)
+                .statusBarDarkFont(true, 0.2f) //原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色,如果当前设备不支持状态栏字体变色,会使当前状态栏加上透明度,否则不执行透明度
+                .init();
+
+    }
+}
diff --git a/app/src/main/java/com/example/myapplication/base/BaseActivity.java b/app/src/main/java/com/example/myapplication/base/BaseActivity.java
index f0ca7e4..8582953 100644
--- a/app/src/main/java/com/example/myapplication/base/BaseActivity.java
+++ b/app/src/main/java/com/example/myapplication/base/BaseActivity.java
@@ -1,14 +1,23 @@
 package com.example.myapplication.base;
 
+import android.content.pm.ActivityInfo;
+import android.graphics.drawable.ColorDrawable;
 import android.os.Bundle;
 
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
 import android.widget.Toast;
 
 
 import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.app.AppCompatActivity;
 
+import com.example.myapplication.R;
 import com.example.myapplication.api.UserApplication;
+import com.gyf.immersionbar.ImmersionBar;
 
 import butterknife.ButterKnife;
 import butterknife.Unbinder;
@@ -16,10 +25,15 @@ import butterknife.Unbinder;
 public abstract class BaseActivity extends AppCompatActivity {
 
     private Unbinder bind;
+    private AlertDialog alertDialog;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        setScreenRoate(true);
+        //初始化,默认透明状态栏和黑色导航栏
+        ImmersionBar.with(this).init();
+        Collector.addActivity(this);
         setContentView(getLayout());
         bind = ButterKnife.bind(this);
         initMVP();
@@ -32,7 +46,33 @@ public abstract class BaseActivity extends AppCompatActivity {
     }
     protected void initMVP() {
     }
+    public void showLoadingDialog() {
+        alertDialog = new AlertDialog.Builder(this).create();
+        alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable());
+        alertDialog.setCancelable(false);
+        alertDialog.setOnKeyListener((dialog, keyCode, event) -> {
+            if (keyCode == KeyEvent.KEYCODE_SEARCH || keyCode == KeyEvent.KEYCODE_BACK)
+                return true;
+            return false;
+        });
+        //loading样式
+        //View view = LayoutInflater.from(this).inflate(R.layout.loading_alert, null);
+        //alertDialog.setView(view);
+        alertDialog.setCanceledOnTouchOutside(false);
+        alertDialog.show();
+    }
 
+    public void setLoadingDialogText(String s) {
+        //给loading 添加文字
+      /*  TextView view = alertDialog.findViewById(R.id.progressBar_tx);
+        view.setText(s);*/
+    }
+
+    public void dismissLoadingDialog() {
+        if (null != alertDialog && alertDialog.isShowing()) {
+            alertDialog.dismiss();
+        }
+    }
     protected void initListener() {
 
     }
@@ -50,6 +90,18 @@ public abstract class BaseActivity extends AppCompatActivity {
     @Override
     protected void onDestroy() {
         super.onDestroy();
+        Collector.removeActivity(this);
         bind.unbind();
     }
+    /**
+     * 设置屏幕横竖屏切换
+     * @param screenRoate true  竖屏     false  横屏
+     */
+    private void setScreenRoate(Boolean screenRoate) {
+        if (screenRoate) {
+            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//设置竖屏模式
+        } else {
+            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+        }
+    }
 }
diff --git a/app/src/main/java/com/example/myapplication/base/BaseFragment.java b/app/src/main/java/com/example/myapplication/base/BaseFragment.java
index af58175..9c84f1c 100644
--- a/app/src/main/java/com/example/myapplication/base/BaseFragment.java
+++ b/app/src/main/java/com/example/myapplication/base/BaseFragment.java
@@ -1,13 +1,16 @@
 package com.example.myapplication.base;
 
+import android.graphics.drawable.ColorDrawable;
 import android.os.Bundle;
 
+import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
 import androidx.fragment.app.Fragment;
 
 import butterknife.ButterKnife;
@@ -16,6 +19,7 @@ import butterknife.Unbinder;
 public abstract class BaseFragment extends Fragment {
 
     private Unbinder bind;
+    private AlertDialog alertDialog;
 
     @Nullable
     @Override
@@ -33,7 +37,33 @@ public abstract class BaseFragment extends Fragment {
     }
 
     protected abstract int getLayout();
+    public void showLoadingDialog() {
+        alertDialog = new AlertDialog.Builder(getActivity()).create();
+        alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable());
+        alertDialog.setCancelable(false);
+        alertDialog.setOnKeyListener((dialog, keyCode, event) -> {
+            if (keyCode == KeyEvent.KEYCODE_SEARCH || keyCode == KeyEvent.KEYCODE_BACK)
+                return true;
+            return false;
+        });
+        //loading样式
+        //View view = LayoutInflater.from(this).inflate(R.layout.loading, null);
+        //alertDialog.setView(view);
+        alertDialog.setCanceledOnTouchOutside(false);
+        alertDialog.show();
+    }
 
+    public void setLoadingDialogText(String s) {
+        //给loading 添加文字
+      /*  TextView view = alertDialog.findViewById(R.id.progressBar_tx);
+        view.setText(s);*/
+    }
+
+    public void dismissLoadingDialog() {
+        if (null != alertDialog && alertDialog.isShowing()) {
+            alertDialog.dismiss();
+        }
+    }
     protected void initData() {
 
     }
diff --git a/app/src/main/java/com/example/myapplication/base/Collector.java b/app/src/main/java/com/example/myapplication/base/Collector.java
new file mode 100644
index 0000000..61d0798
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/base/Collector.java
@@ -0,0 +1,26 @@
+package com.example.myapplication.base;
+
+import android.app.Activity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Collector {
+
+    public static List<Activity> activityList=new ArrayList<>();
+
+    public static void addActivity(Activity activity){
+        activityList.add(activity);
+
+    }
+    public static void removeActivity(Activity activity) {
+        activityList.remove(activity);
+    }
+    public static void finishAll() {
+        for (Activity activity : activityList) {
+            if (!activity.isFinishing()) {
+                activity.finish();
+            }
+        }
+    }
+}
diff --git a/app/src/main/java/com/example/myapplication/fragment/MineFragment.java b/app/src/main/java/com/example/myapplication/fragment/MineFragment.java
index 1d336e5..acdd782 100644
--- a/app/src/main/java/com/example/myapplication/fragment/MineFragment.java
+++ b/app/src/main/java/com/example/myapplication/fragment/MineFragment.java
@@ -4,7 +4,7 @@ import com.example.myapplication.R;
 import com.example.myapplication.base.BaseFragment;
 
 /**
- * 我的的Fragment
+ * 我的Fragment
  * 2021-5-25
  */
 public class MineFragment extends BaseFragment {
diff --git a/app/src/main/java/com/example/myapplication/fragment/RecordFragment.java b/app/src/main/java/com/example/myapplication/fragment/RecordFragment.java
index 441c6fd..8ccb0c5 100644
--- a/app/src/main/java/com/example/myapplication/fragment/RecordFragment.java
+++ b/app/src/main/java/com/example/myapplication/fragment/RecordFragment.java
@@ -1,7 +1,13 @@
 package com.example.myapplication.fragment;
 
+import android.view.Gravity;
+
 import com.example.myapplication.R;
 import com.example.myapplication.base.BaseFragment;
+import com.example.myapplication.http.Callback;
+import com.example.myapplication.http.OkGoBuilder;
+
+import org.json.JSONObject;
 
 /**
  * 记录的Fragment
@@ -15,6 +21,22 @@ public class RecordFragment extends BaseFragment {
     @Override
     protected void initView() {
         super.initView();
+        JSONObject jsonObject = new JSONObject();
+        OkGoBuilder.getInstance().Builder(getActivity()).url("")
+                .method(OkGoBuilder.PSOT)
+                .json(jsonObject)
+                .cls(Gravity.class)
+                .callback(new Callback() {
+                    @Override
+                    public void onSuccess(Object response, int id) {
+
+                    }
+
+                    @Override
+                    public void onError(Throwable e, int id) {
+
+                    }
+                }).build();
     }
 
     @Override
diff --git a/app/src/main/java/com/example/myapplication/http/Callback.java b/app/src/main/java/com/example/myapplication/http/Callback.java
new file mode 100644
index 0000000..32281e7
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/http/Callback.java
@@ -0,0 +1,24 @@
+package com.example.myapplication.http;
+
+/**
+ * Created by yzb_android on 2019/12/30.
+ * 作用:
+ */
+
+public interface Callback<T> {
+    /**
+     * 数据成功时候回调
+     *
+     * @param response 成功回调接口
+     * @param id       成功码
+     */
+    void onSuccess(T response, int id);
+
+    /**
+     * 数据失败时候回调
+     *
+     * @param e  失败回调异常
+     * @param id 失败码
+     */
+    void onError(Throwable e, int id);
+}
diff --git a/app/src/main/java/com/example/myapplication/http/DialogCallback.java b/app/src/main/java/com/example/myapplication/http/DialogCallback.java
new file mode 100644
index 0000000..28ea463
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/http/DialogCallback.java
@@ -0,0 +1,38 @@
+package com.example.myapplication.http;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.graphics.drawable.ColorDrawable;
+import android.view.KeyEvent;
+
+import com.lzy.okgo.model.Response;
+import com.lzy.okgo.request.base.Request;
+
+/**
+ * Created by yzb_android on 2021 5 25
+ * 作用:网络请求前显示一个dialog,请求结束后取消loading
+ */
+
+public abstract class DialogCallback<T> extends JsonCallback<T> {
+
+    @Override
+    public void onSuccess(Response<T> response) {
+
+    }
+
+    public DialogCallback( Class<T> tClass) {
+        super(tClass);
+    }
+
+
+    @Override
+    public void onStart(Request<T, ? extends Request> request) {
+
+    }
+
+    @Override
+    public void onFinish() {
+    }
+
+
+}
diff --git a/app/src/main/java/com/example/myapplication/http/HttpInterface.java b/app/src/main/java/com/example/myapplication/http/HttpInterface.java
new file mode 100644
index 0000000..f72153e
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/http/HttpInterface.java
@@ -0,0 +1,5 @@
+package com.example.myapplication.http;
+
+public class HttpInterface {
+
+}
diff --git a/app/src/main/java/com/example/myapplication/http/JsonCallback.java b/app/src/main/java/com/example/myapplication/http/JsonCallback.java
new file mode 100644
index 0000000..6a74a27
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/http/JsonCallback.java
@@ -0,0 +1,53 @@
+package com.example.myapplication.http;
+
+import com.example.myapplication.util.Whetherisempty;
+import com.google.gson.Gson;
+import com.lzy.okgo.callback.AbsCallback;
+
+import java.lang.reflect.Type;
+
+import okhttp3.Response;
+import okhttp3.ResponseBody;
+
+
+/**
+ * Created by yzb_android on 2019/12/30.
+ * 作用:将返回过来的json字符串转换为实体类
+ */
+
+public abstract class JsonCallback<T> extends AbsCallback<T> {
+
+    private Type mType;
+    private Class<T> clazz;
+    public JsonCallback() {
+    }
+
+    public JsonCallback(Type type) {
+        mType = type;
+    }
+
+    public JsonCallback(Class<T> clazz) {
+        this.clazz = clazz;
+    }
+
+    @Override
+    public T convertResponse(Response response) throws Throwable {
+
+        ResponseBody body = response.body();
+        if (body == null) {
+            return null;
+        }
+        T data = null;
+        Gson gson = new Gson();
+        String str = Whetherisempty.getClfz(response.body().string());
+        if (mType != null) {
+            data = gson.fromJson(str, mType);
+        }
+        if (clazz != null) {
+            data = gson.fromJson(str, clazz);
+            //可以将错误信息在onError中获取到
+            //https://github.com/jeasonlzy/okhttp-OkGo/wiki/Callback#callback%E4%BB%8B%E7%BB%8D
+        }
+        return data;
+    }
+}
diff --git a/app/src/main/java/com/example/myapplication/http/OkGoBuilder.java b/app/src/main/java/com/example/myapplication/http/OkGoBuilder.java
new file mode 100644
index 0000000..08a7399
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/http/OkGoBuilder.java
@@ -0,0 +1,283 @@
+package com.example.myapplication.http;
+
+import android.app.Activity;
+
+import com.lzy.okgo.OkGo;
+import com.lzy.okgo.model.HttpParams;
+import com.lzy.okgo.model.Response;
+import com.lzy.okgo.request.PostRequest;
+
+import org.json.JSONObject;
+
+import java.io.File;
+import java.util.ArrayList;
+
+/**
+ * Created by yzb_android on 2021 5 25
+ * 作用:OKGO帮助类-建造者模式
+ */
+
+public class OkGoBuilder<T> {
+    /**
+     * get请求
+     */
+    public static final int GET = 1;
+    /**
+     * post请求
+     */
+    public static final int PSOT = 2;
+    /**
+     * post请求
+     */
+    public static final int PSOTFILE = 3;
+
+    public static final int PSOTFILEALONE = 4;
+
+    private Activity activity;
+    /**
+     * 请求网址
+     */
+    private String url;
+    private String file;
+    private String pdf;
+    /**
+     * 参数
+     */
+    private HttpParams params;
+    //private String jsonstr;
+    private JSONObject json;
+    /**
+     * 实体类
+     */
+    private Class<T> clazz;
+    /**
+     * 回调
+     */
+    private Callback<T> callback;
+
+    private int methodType;
+    private ArrayList<File> list;
+
+    /**
+     * 单列模式
+     **/
+    private static OkGoBuilder mOkGoBuilder = null;
+
+    /**
+     * 构造函数私有化
+     **/
+    private OkGoBuilder() {
+
+    }
+
+    /**
+     * 公有的静态函数,对外暴露获取单例对象的接口
+     **/
+    public static OkGoBuilder getInstance() {
+//        if (mOkGoBuilder == null) {
+//            synchronized (OkGoBuilder.class) {
+//                if (mOkGoBuilder == null) {
+        mOkGoBuilder = new OkGoBuilder();
+//                }
+//            }
+//        }
+        return mOkGoBuilder;
+    }
+
+    public OkGoBuilder Builder(Activity activity) {
+        this.activity = activity;
+        return this;
+    }
+
+    public OkGoBuilder url(String url) {
+        this.url = url;
+        return this;
+    }
+
+    public OkGoBuilder file(String file) {
+        this.file = file;
+        return this;
+    }
+
+    public OkGoBuilder pdf(String pdf) {
+        this.pdf = pdf;
+        return this;
+    }
+
+    public OkGoBuilder method(int methodType) {
+        this.methodType = methodType;
+        return this;
+    }
+
+    public OkGoBuilder params(HttpParams params) {
+        this.params = params;
+        return this;
+    }
+
+    public OkGoBuilder list(ArrayList<File> list) {
+        this.list = list;
+        return this;
+    }
+
+
+//    public OkGoBuilder jsonstr(String jsonstr) {
+//        this.jsonstr = jsonstr;
+//        return this;
+//    }
+
+    public OkGoBuilder json(JSONObject json) {
+        this.json = json;
+        return this;
+    }
+
+    public OkGoBuilder cls(Class<T> clazz) {
+        this.clazz = clazz;
+        return this;
+    }
+
+    public OkGoBuilder callback(Callback<T> callback) {
+        this.callback = callback;
+        return this;
+    }
+
+
+    public OkGoBuilder build() {
+        switch (methodType) {
+            case 1:
+                getRequest();
+                break;
+            case 2:
+                postRequest();
+                break;
+            case 3:
+                postRequestFile();
+                break;
+            case 4:
+                postRequestAloneFile();
+                break;
+        }
+        return this;
+    }
+
+    /**
+     * post请求
+     */
+    private void postRequest() {
+        OkGo
+                // 请求方式和请求url
+                .<T>post(url)
+                .params("param", json.toString())
+//                .upJson(json)
+                // 请求的 tag, 主要用于取消对应的请求
+                .tag(this)
+                // 设置当前请求的缓存key,建议每个不同功能的请求设置一个
+//                .cacheKey("cacheKey")
+                // 缓存模式,详细请看缓存介绍
+//                .cacheMode(CacheMode.DEFAULT)
+                .execute(new DialogCallback<T>(clazz) {
+                    @Override
+                    public void onSuccess(Response<T> response) {
+                        callback.onSuccess(response.body(), 1);
+                    }
+
+                    @Override
+                    public void onError(Response<T> response) {
+                        super.onError(response);
+                        Throwable throwable = response.getException();
+                        if (throwable != null) {
+                            throwable.printStackTrace();
+                            callback.onError(throwable, 2);
+                        }
+                    }
+                });
+    }
+
+    /**
+     * get请求
+     */
+    private void getRequest() {
+        OkGo
+                // 请求方式和请求url
+                .<T>get(url)
+                .params(params)
+                // 请求的 tag, 主要用于取消对应的请求
+                .tag(this)
+                // 设置当前请求的缓存key,建议每个不同功能的请求设置一个
+//                .cacheKey("cacheKey")
+                // 缓存模式,详细请看缓存介绍
+//                .cacheMode(CacheMode.DEFAULT)
+                .execute(new DialogCallback<T>(clazz) {
+                    @Override
+                    public void onSuccess(Response<T> response) {
+                        callback.onSuccess(response.body(), 1);
+                    }
+
+                    @Override
+                    public void onError(Response<T> response) {
+                        super.onError(response);
+                        Throwable throwable = response.getException();
+                        if (throwable != null) {
+                            throwable.printStackTrace();
+                            callback.onError(throwable, 2);
+                        }
+                    }
+                });
+    }
+
+    /**
+     * post 发送文件
+     */
+    private void postRequestFile() {
+        PostRequest<T> request = OkGo.<T>post(url)
+                .tag(this)
+                .params("param", json.toString());
+        if (list != null && list.size() > 0) {
+            for (int i = 0; i < list.size(); i++) {
+                request.params("file_" + i, list.get(i));
+            }
+        }
+        if (pdf != null) {
+            request.params("pdf", new File(pdf));
+        }
+        request.execute(new DialogCallback<T>(clazz) {
+            @Override
+            public void onSuccess(Response<T> response) {
+                callback.onSuccess(response.body(), 1);
+            }
+
+            @Override
+            public void onError(Response<T> response) {
+                super.onError(response);
+                Throwable throwable = response.getException();
+                if (throwable != null) {
+                    throwable.printStackTrace();
+                    callback.onError(throwable, 2);
+                }
+            }
+        });
+    }
+
+    private void postRequestAloneFile() {
+        PostRequest<T> request = OkGo.<T>post(url).tag(this)
+                .params("param", json.toString());
+        if (file != null) {
+            request.params("file", new File(file));
+        }
+        request.execute(new DialogCallback<T>(clazz) {
+            @Override
+            public void onSuccess(Response<T> response) {
+                callback.onSuccess(response.body(), 1);
+            }
+
+            @Override
+            public void onError(Response<T> response) {
+                super.onError(response);
+                Throwable throwable = response.getException();
+                if (throwable != null) {
+                    throwable.printStackTrace();
+                    callback.onError(throwable, 2);
+                }
+            }
+        });
+    }
+}
diff --git a/app/src/main/java/com/example/myapplication/net/DataService.java b/app/src/main/java/com/example/myapplication/net/DataService.java
deleted file mode 100644
index 3794a19..0000000
--- a/app/src/main/java/com/example/myapplication/net/DataService.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.example.myapplication.net;
-
-import com.lzy.okgo.interceptor.HttpLoggingInterceptor;
-
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.concurrent.TimeUnit;
-
-import okhttp3.Interceptor;
-import okhttp3.OkHttpClient;
-import retrofit2.Converter;
-import retrofit2.Retrofit;
-import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
-import retrofit2.converter.gson.GsonConverterFactory;
-
-public class DataService {
-
-    private static final long DEFAULT_TIMEOUT = 20000; // 默认超时20s
-    private static Object mApiService;
-
-    private static ArrayList<Interceptor> mInterceptors;
-    private static Converter.Factory mFactor;
-    private static Class mServiceClass;
-    private static String mBaseUrl;
-
-    public static void init(Class aClass, String baseUrl, ArrayList<Interceptor> interceptor, Converter.Factory factor) {
-        mServiceClass = aClass;
-        mBaseUrl = baseUrl;
-        mInterceptors = interceptor;
-        mFactor = factor;
-
-    }
-
-    public static void init(Class aClass, String baseUrl, ArrayList<Interceptor> interceptor) {
-        init(aClass, baseUrl, interceptor, null);
-
-    }
-
-    public static void init(Class aClass, String baseUrl, Converter.Factory factor) {
-        init(aClass, baseUrl, null, factor);
-
-    }
-
-    public static void init(Class aClass, String baseUrl) {
-        init(aClass, baseUrl, null, null);
-
-    }
-
-    public static synchronized Object getApiService() {
-
-        if (mServiceClass == null) {
-            throw new NullPointerException("在调用 DataService 的 getApiService 之前必须调用 init 方法惊喜初始化");
-        }
-
-        if (mApiService == null) {
-            OkHttpClient.Builder builder = new OkHttpClient.Builder();
-            if (mInterceptors != null && mInterceptors.size() > 0) {
-                for (Interceptor interceptor : mInterceptors) {
-                    builder.addInterceptor(interceptor);
-                }
-            }
-
-            builder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS)
-                    .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS)
-                    .readTimeout(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS)
-                    .build();
-
-            Retrofit retrofit = new Retrofit.Builder()
-                    .client(builder.build())
-                    .addConverterFactory(mFactor == null ? GsonConverterFactory.create() : mFactor) // 帮我们把json 窜转为 entity 对象
-                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // 结合 rxjava 使用
-                    .baseUrl(mBaseUrl)
-                    .build();
-
-            mApiService = retrofit.create(mServiceClass);
-
-            System.out.println("");
-        }
-
-        return mApiService;
-    }
-}
diff --git a/app/src/main/java/com/example/myapplication/util/SoftHideKeyBoardUtil.java b/app/src/main/java/com/example/myapplication/util/SoftHideKeyBoardUtil.java
new file mode 100644
index 0000000..6752550
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/util/SoftHideKeyBoardUtil.java
@@ -0,0 +1,66 @@
+package com.example.myapplication.util;
+
+import android.app.Activity;
+import android.graphics.Rect;
+import android.os.Build;
+import android.view.View;
+import android.view.ViewTreeObserver;
+import android.widget.FrameLayout;
+
+/**
+ * 2021 5 25
+ */
+
+public class SoftHideKeyBoardUtil {
+    public static void assistActivity(Activity activity) {
+        new SoftHideKeyBoardUtil(activity);
+    }
+
+    private View mChildOfContent;
+    private int usableHeightPrevious;
+    private FrameLayout.LayoutParams frameLayoutParams; //为适应华为小米等手机键盘上方出现黑条或不适配
+    private int contentHeight;//获取setContentView本来view的高度
+    private boolean isfirst = true;//只用获取一次
+    private int statusBarHeight;//状态栏高度
+
+    private SoftHideKeyBoardUtil(Activity activity) { //1、找到Activity的最外层布局控件,它其实是一个DecorView,它所用的控件就是FrameLayout
+        FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content); //2、获取到setContentView放进去的View
+        mChildOfContent = content.getChildAt(0); //3、给Activity的xml布局设置View树监听,当布局有变化,如键盘弹出或收起时,都会回调此监听
+        mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { //4、软键盘弹起会使GlobalLayout发生变化
+            public void onGlobalLayout() {
+                if (isfirst) {
+                    contentHeight = mChildOfContent.getHeight();//兼容华为等机型
+                    isfirst = false;
+                }  //5、当前布局发生变化时,对Activity的xml布局进行重绘
+                possiblyResizeChildOfContent();
+            }
+        }); //6、获取到Activity的xml布局的放置参数
+        frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
+    } // 获取界面可用高度,如果软键盘弹起后,Activity的xml布局可用高度需要减去键盘高度
+
+    private void possiblyResizeChildOfContent() { //1、获取当前界面可用高度,键盘弹起后,当前界面可用布局会减少键盘的高度
+        int usableHeightNow = computeUsableHeight(); //2、如果当前可用高度和原始值不一样
+        if (usableHeightNow != usableHeightPrevious) {  //3、获取Activity中xml中布局在当前界面显示的高度
+            int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();  //4、Activity中xml布局的高度-当前可用高度
+            int heightDifference = usableHeightSansKeyboard - usableHeightNow;  //5、高度差大于屏幕1/4时,说明键盘弹出
+            if (heightDifference > (usableHeightSansKeyboard / 4)) {  // 6、键盘弹出了,Activity的xml布局高度应当减去键盘高度
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+                    frameLayoutParams.height = usableHeightSansKeyboard - heightDifference + statusBarHeight;
+                } else {
+                    frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
+                }
+            } else {
+                frameLayoutParams.height = contentHeight;
+            }  //7、 重绘Activity的xml布局
+            mChildOfContent.requestLayout();
+            usableHeightPrevious = usableHeightNow;
+        }
+    }
+
+    private int computeUsableHeight() {
+        Rect r = new Rect();
+        mChildOfContent.getWindowVisibleDisplayFrame(r); // 全屏模式下:直接返回r.bottom,r.top其实是状态栏的高度
+        return (r.bottom - r.top);
+    }
+
+}
diff --git a/app/src/main/java/com/example/myapplication/util/SoftKeyboardStateHelper.java b/app/src/main/java/com/example/myapplication/util/SoftKeyboardStateHelper.java
new file mode 100644
index 0000000..453eb73
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/util/SoftKeyboardStateHelper.java
@@ -0,0 +1,94 @@
+package com.example.myapplication.util;
+
+import android.graphics.Rect;
+import android.view.View;
+import android.view.ViewTreeObserver;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Created by yzb_android on
+ * 作用:监听软键盘
+ */
+
+public class SoftKeyboardStateHelper implements ViewTreeObserver.OnGlobalLayoutListener {
+
+    public interface SoftKeyboardStateListener {
+        void onSoftKeyboardOpened(int keyboardHeightInPx);
+        void onSoftKeyboardClosed();
+    }
+
+    private final List<SoftKeyboardStateListener> listeners = new LinkedList<SoftKeyboardStateListener>();
+    private final View activityRootView;
+    private int        lastSoftKeyboardHeightInPx;
+    private boolean    isSoftKeyboardOpened;
+
+    public SoftKeyboardStateHelper(View activityRootView) {
+        this(activityRootView, false);
+    }
+
+    public SoftKeyboardStateHelper(View activityRootView, boolean isSoftKeyboardOpened) {
+        this.activityRootView     = activityRootView;
+        this.isSoftKeyboardOpened = isSoftKeyboardOpened;
+        activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(this);
+    }
+
+    @Override
+    public void onGlobalLayout() {
+        final Rect r = new Rect();
+        //r will be populated with the coordinates of your view that area still visible.
+        activityRootView.getWindowVisibleDisplayFrame(r);
+
+        final int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
+        if (!isSoftKeyboardOpened && heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
+            isSoftKeyboardOpened = true;
+            notifyOnSoftKeyboardOpened(heightDiff);
+        } else if (isSoftKeyboardOpened && heightDiff < 100) {
+            isSoftKeyboardOpened = false;
+            notifyOnSoftKeyboardClosed();
+        }
+    }
+
+    public void setIsSoftKeyboardOpened(boolean isSoftKeyboardOpened) {
+        this.isSoftKeyboardOpened = isSoftKeyboardOpened;
+    }
+
+    public boolean isSoftKeyboardOpened() {
+        return isSoftKeyboardOpened;
+    }
+
+    /**
+     * Default value is zero (0)
+     * @return last saved keyboard height in px
+     */
+    public int getLastSoftKeyboardHeightInPx() {
+        return lastSoftKeyboardHeightInPx;
+    }
+
+    public void addSoftKeyboardStateListener(SoftKeyboardStateListener listener) {
+        listeners.add(listener);
+    }
+
+    public void removeSoftKeyboardStateListener(SoftKeyboardStateListener listener) {
+        listeners.remove(listener);
+    }
+
+    private void notifyOnSoftKeyboardOpened(int keyboardHeightInPx) {
+        this.lastSoftKeyboardHeightInPx = keyboardHeightInPx;
+
+        for (SoftKeyboardStateListener listener : listeners) {
+            if (listener != null) {
+                listener.onSoftKeyboardOpened(keyboardHeightInPx);
+            }
+        }
+    }
+
+    private void notifyOnSoftKeyboardClosed() {
+        for (SoftKeyboardStateListener listener : listeners) {
+            if (listener != null) {
+                listener.onSoftKeyboardClosed();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/util/Whetherisempty.java b/app/src/main/java/com/example/myapplication/util/Whetherisempty.java
new file mode 100644
index 0000000..1d43f79
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/util/Whetherisempty.java
@@ -0,0 +1,26 @@
+package com.example.myapplication.util;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+//去掉空的字符
+public class Whetherisempty {
+    public static String getClfz(String s) throws JSONException {
+        JSONObject jsonObject = new JSONObject(s);
+        if (String.valueOf(jsonObject.get("result")).equals("[]") || String.valueOf(jsonObject.get("result")).equals("")) {
+            jsonObject.put("result", null);
+            return jsonObject.toString();
+        } else {
+            return s;
+        }
+    }
+
+    public static String getCl(String s) {
+        String s2 = s.substring(s.length() - 3, s.length() - 1);
+        if (s2.equals("[]") || s2.equals("")) {
+            return s.substring(0, s.lastIndexOf(",")) + "}";
+        } else {
+            return s;
+        }
+    }
+}
diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml
index dadffde..c279881 100644
--- a/app/src/main/res/layout/activity_home.xml
+++ b/app/src/main/res/layout/activity_home.xml
@@ -1,9 +1,30 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout 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"
     tools:context=".activity.HomeActivity">
 
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
+    <com.example.myapplication.util.NoSlideViewPager
+        android:id="@+id/no_slide_view_pager"
+        android:layout_width="wrap_content"
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toTopOf="@+id/tab_layout"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <com.google.android.material.tabs.TabLayout
+        android:id="@+id/tab_layout"
+        android:layout_width="match_parent"
+        android:layout_height="60dp"
+        app:tabRippleColor="@android:color/transparent"
+        app:tabIndicatorHeight="0dp"
+        app:tabTextColor="#F0686666"
+        app:tabSelectedTextColor="#000000"
+        android:background="#ffff"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout >
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 77e23a4..4bc066f 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -8,6 +8,7 @@
     tools:context=".activity.MainActivity">
 
     <TextView
+        android:id="@+id/tv_view"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="启动页"
diff --git a/app/src/main/res/layout/item_tab.xml b/app/src/main/res/layout/item_tab.xml
new file mode 100644
index 0000000..41b0ee0
--- /dev/null
+++ b/app/src/main/res/layout/item_tab.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
+
+    <ImageView
+        android:id="@+id/img_title"
+        android:layout_width="20dp"
+        android:layout_height="20dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/txt_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="@+id/img_title"
+        app:layout_constraintStart_toStartOf="@+id/img_title"
+        app:layout_constraintTop_toBottomOf="@+id/img_title" />
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/login_activity.xml b/app/src/main/res/layout/login_activity.xml
new file mode 100644
index 0000000..61a4490
--- /dev/null
+++ b/app/src/main/res/layout/login_activity.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/management_fragment.xml b/app/src/main/res/layout/management_fragment.xml
new file mode 100644
index 0000000..6888398
--- /dev/null
+++ b/app/src/main/res/layout/management_fragment.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <FrameLayout
+        android:id="@+id/frame_layout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/article.png b/app/src/main/res/mipmap-hdpi/article.png
new file mode 100644
index 0000000..baa6738
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/article.png differ
diff --git a/app/src/main/res/mipmap-hdpi/article_select.png b/app/src/main/res/mipmap-hdpi/article_select.png
new file mode 100644
index 0000000..cb9be12
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/article_select.png differ
diff --git a/app/src/main/res/mipmap-hdpi/bg.png b/app/src/main/res/mipmap-hdpi/bg.png
new file mode 100644
index 0000000..2fb924d
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/bg.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
index a571e60..e44d534 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/map.png b/app/src/main/res/mipmap-hdpi/map.png
new file mode 100644
index 0000000..fd6221f
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/map.png differ
diff --git a/app/src/main/res/mipmap-hdpi/map_select.png b/app/src/main/res/mipmap-hdpi/map_select.png
new file mode 100644
index 0000000..f1b76cc
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/map_select.png differ
diff --git a/app/src/main/res/mipmap-hdpi/mine.png b/app/src/main/res/mipmap-hdpi/mine.png
new file mode 100644
index 0000000..ab8e6b5
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/mine.png differ
diff --git a/app/src/main/res/mipmap-hdpi/mine_select.png b/app/src/main/res/mipmap-hdpi/mine_select.png
new file mode 100644
index 0000000..3530658
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/mine_select.png differ
diff --git a/app/src/main/res/mipmap-hdpi/task.png b/app/src/main/res/mipmap-hdpi/task.png
new file mode 100644
index 0000000..e9ef7b6
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/task.png differ
diff --git a/app/src/main/res/mipmap-hdpi/task_select.png b/app/src/main/res/mipmap-hdpi/task_select.png
new file mode 100644
index 0000000..08fcd0c
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/task_select.png differ
diff --git a/app/src/main/res/mipmap-ldpi/article.png b/app/src/main/res/mipmap-ldpi/article.png
new file mode 100644
index 0000000..baa6738
Binary files /dev/null and b/app/src/main/res/mipmap-ldpi/article.png differ
diff --git a/app/src/main/res/mipmap-ldpi/article_select.png b/app/src/main/res/mipmap-ldpi/article_select.png
new file mode 100644
index 0000000..cb9be12
Binary files /dev/null and b/app/src/main/res/mipmap-ldpi/article_select.png differ
diff --git a/app/src/main/res/mipmap-ldpi/bg.png b/app/src/main/res/mipmap-ldpi/bg.png
new file mode 100644
index 0000000..2fb924d
Binary files /dev/null and b/app/src/main/res/mipmap-ldpi/bg.png differ
diff --git a/app/src/main/res/mipmap-ldpi/ic_launcher.png b/app/src/main/res/mipmap-ldpi/ic_launcher.png
new file mode 100644
index 0000000..c34dcf0
Binary files /dev/null and b/app/src/main/res/mipmap-ldpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-ldpi/map.png b/app/src/main/res/mipmap-ldpi/map.png
new file mode 100644
index 0000000..fd6221f
Binary files /dev/null and b/app/src/main/res/mipmap-ldpi/map.png differ
diff --git a/app/src/main/res/mipmap-ldpi/map_select.png b/app/src/main/res/mipmap-ldpi/map_select.png
new file mode 100644
index 0000000..f1b76cc
Binary files /dev/null and b/app/src/main/res/mipmap-ldpi/map_select.png differ
diff --git a/app/src/main/res/mipmap-ldpi/mine.png b/app/src/main/res/mipmap-ldpi/mine.png
new file mode 100644
index 0000000..ab8e6b5
Binary files /dev/null and b/app/src/main/res/mipmap-ldpi/mine.png differ
diff --git a/app/src/main/res/mipmap-ldpi/mine_select.png b/app/src/main/res/mipmap-ldpi/mine_select.png
new file mode 100644
index 0000000..3530658
Binary files /dev/null and b/app/src/main/res/mipmap-ldpi/mine_select.png differ
diff --git a/app/src/main/res/mipmap-ldpi/task.png b/app/src/main/res/mipmap-ldpi/task.png
new file mode 100644
index 0000000..e9ef7b6
Binary files /dev/null and b/app/src/main/res/mipmap-ldpi/task.png differ
diff --git a/app/src/main/res/mipmap-ldpi/task_select.png b/app/src/main/res/mipmap-ldpi/task_select.png
new file mode 100644
index 0000000..08fcd0c
Binary files /dev/null and b/app/src/main/res/mipmap-ldpi/task_select.png differ
diff --git a/app/src/main/res/mipmap-mdpi/article.png b/app/src/main/res/mipmap-mdpi/article.png
new file mode 100644
index 0000000..baa6738
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/article.png differ
diff --git a/app/src/main/res/mipmap-mdpi/article_select.png b/app/src/main/res/mipmap-mdpi/article_select.png
new file mode 100644
index 0000000..cb9be12
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/article_select.png differ
diff --git a/app/src/main/res/mipmap-mdpi/bg.png b/app/src/main/res/mipmap-mdpi/bg.png
new file mode 100644
index 0000000..2fb924d
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/bg.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
index c41dd28..31b83a1 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/map.png b/app/src/main/res/mipmap-mdpi/map.png
new file mode 100644
index 0000000..fd6221f
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/map.png differ
diff --git a/app/src/main/res/mipmap-mdpi/map_select.png b/app/src/main/res/mipmap-mdpi/map_select.png
new file mode 100644
index 0000000..f1b76cc
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/map_select.png differ
diff --git a/app/src/main/res/mipmap-mdpi/mine.png b/app/src/main/res/mipmap-mdpi/mine.png
new file mode 100644
index 0000000..ab8e6b5
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/mine.png differ
diff --git a/app/src/main/res/mipmap-mdpi/mine_select.png b/app/src/main/res/mipmap-mdpi/mine_select.png
new file mode 100644
index 0000000..3530658
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/mine_select.png differ
diff --git a/app/src/main/res/mipmap-mdpi/task.png b/app/src/main/res/mipmap-mdpi/task.png
new file mode 100644
index 0000000..e9ef7b6
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/task.png differ
diff --git a/app/src/main/res/mipmap-mdpi/task_select.png b/app/src/main/res/mipmap-mdpi/task_select.png
new file mode 100644
index 0000000..08fcd0c
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/task_select.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/article.png b/app/src/main/res/mipmap-xhdpi/article.png
new file mode 100644
index 0000000..baa6738
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/article.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/article_select.png b/app/src/main/res/mipmap-xhdpi/article_select.png
new file mode 100644
index 0000000..cb9be12
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/article_select.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/bg.png b/app/src/main/res/mipmap-xhdpi/bg.png
new file mode 100644
index 0000000..2fb924d
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/bg.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index 6dba46d..b387752 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/map.png b/app/src/main/res/mipmap-xhdpi/map.png
new file mode 100644
index 0000000..fd6221f
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/map.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/map_select.png b/app/src/main/res/mipmap-xhdpi/map_select.png
new file mode 100644
index 0000000..f1b76cc
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/map_select.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/mine.png b/app/src/main/res/mipmap-xhdpi/mine.png
new file mode 100644
index 0000000..ab8e6b5
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/mine.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/mine_select.png b/app/src/main/res/mipmap-xhdpi/mine_select.png
new file mode 100644
index 0000000..3530658
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/mine_select.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/task.png b/app/src/main/res/mipmap-xhdpi/task.png
new file mode 100644
index 0000000..e9ef7b6
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/task.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/task_select.png b/app/src/main/res/mipmap-xhdpi/task_select.png
new file mode 100644
index 0000000..08fcd0c
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/task_select.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/article.png b/app/src/main/res/mipmap-xxhdpi/article.png
new file mode 100644
index 0000000..baa6738
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/article.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/article_select.png b/app/src/main/res/mipmap-xxhdpi/article_select.png
new file mode 100644
index 0000000..cb9be12
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/article_select.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/bg.png b/app/src/main/res/mipmap-xxhdpi/bg.png
new file mode 100644
index 0000000..2fb924d
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/bg.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 15ac681..a5c8708 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/map.png b/app/src/main/res/mipmap-xxhdpi/map.png
new file mode 100644
index 0000000..fd6221f
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/map.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/map_select.png b/app/src/main/res/mipmap-xxhdpi/map_select.png
new file mode 100644
index 0000000..f1b76cc
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/map_select.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine.png b/app/src/main/res/mipmap-xxhdpi/mine.png
new file mode 100644
index 0000000..ab8e6b5
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_select.png b/app/src/main/res/mipmap-xxhdpi/mine_select.png
new file mode 100644
index 0000000..3530658
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_select.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/task.png b/app/src/main/res/mipmap-xxhdpi/task.png
new file mode 100644
index 0000000..e9ef7b6
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/task.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/task_select.png b/app/src/main/res/mipmap-xxhdpi/task_select.png
new file mode 100644
index 0000000..08fcd0c
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/task_select.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/article.png b/app/src/main/res/mipmap-xxxhdpi/article.png
new file mode 100644
index 0000000..baa6738
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/article.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/article_select.png b/app/src/main/res/mipmap-xxxhdpi/article_select.png
new file mode 100644
index 0000000..cb9be12
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/article_select.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/bg.png b/app/src/main/res/mipmap-xxxhdpi/bg.png
new file mode 100644
index 0000000..2fb924d
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/bg.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index f25a419..da17df6 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/map.png b/app/src/main/res/mipmap-xxxhdpi/map.png
new file mode 100644
index 0000000..fd6221f
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/map.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/map_select.png b/app/src/main/res/mipmap-xxxhdpi/map_select.png
new file mode 100644
index 0000000..f1b76cc
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/map_select.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/mine.png b/app/src/main/res/mipmap-xxxhdpi/mine.png
new file mode 100644
index 0000000..ab8e6b5
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/mine.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/mine_select.png b/app/src/main/res/mipmap-xxxhdpi/mine_select.png
new file mode 100644
index 0000000..3530658
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/mine_select.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/task.png b/app/src/main/res/mipmap-xxxhdpi/task.png
new file mode 100644
index 0000000..e9ef7b6
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/task.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/task_select.png b/app/src/main/res/mipmap-xxxhdpi/task_select.png
new file mode 100644
index 0000000..08fcd0c
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/task_select.png differ
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
deleted file mode 100644
index 1e8b0fa..0000000
--- a/app/src/main/res/navigation/nav_graph.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<navigation 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:id="@+id/nav_graph"
-    app:startDestination="@id/FirstFragment">
-
-    <fragment
-        android:id="@+id/FirstFragment"
-        android:name="com.example.myapplication.activity.FirstFragment"
-        android:label="@string/first_fragment_label"
-        tools:layout="@layout/fragment_first">
-
-        <action
-            android:id="@+id/action_FirstFragment_to_SecondFragment"
-            app:destination="@id/SecondFragment" />
-    </fragment>
-    <fragment
-        android:id="@+id/SecondFragment"
-        android:name="com.example.myapplication.activity.SecondFragment"
-        android:label="@string/second_fragment_label"
-        tools:layout="@layout/fragment_second">
-
-        <action
-            android:id="@+id/action_SecondFragment_to_FirstFragment"
-            app:destination="@id/FirstFragment" />
-    </fragment>
-</navigation>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bfc0b4a..89586ef 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
 <resources>
-    <string name="app_name">MyApplication</string>
+    <string name="app_name">navinfo</string>
     <string name="title_activity_home">HomeActivity</string>
     <!-- Strings used for fragments for navigation -->
     <string name="first_fragment_label">First Fragment</string>