فهرست منبع

学生端开头

Ryan8057 2 سال پیش
والد
کامیت
1562b57102
28فایلهای تغییر یافته به همراه657 افزوده شده و 42 حذف شده
  1. 0 16
      BaseLibrary/src/main/res/values-night/themes.xml
  2. 2 18
      BaseLibrary/src/main/res/values/styles.xml
  3. 6 4
      BaseLibrary/src/main/res/values/themes.xml
  4. 1 1
      config.gradle
  5. 4 0
      student/src/main/AndroidManifest.xml
  6. 1 1
      student/src/main/java/com/cooleshow/student/App.java
  7. 35 0
      student/src/main/java/com/cooleshow/student/adapter/HomePageAdapter.java
  8. 26 0
      student/src/main/java/com/cooleshow/student/api/APIService.java
  9. 17 0
      student/src/main/java/com/cooleshow/student/contract/CourseTableContract.java
  10. 17 0
      student/src/main/java/com/cooleshow/student/contract/HomeContract.java
  11. 20 0
      student/src/main/java/com/cooleshow/student/contract/MainContract.java
  12. 17 0
      student/src/main/java/com/cooleshow/student/contract/MineContract.java
  13. 17 0
      student/src/main/java/com/cooleshow/student/contract/ShopMallContract.java
  14. 14 0
      student/src/main/java/com/cooleshow/student/presenter/main/CourseTablePresenter.java
  15. 14 0
      student/src/main/java/com/cooleshow/student/presenter/main/HomePresenter.java
  16. 33 0
      student/src/main/java/com/cooleshow/student/presenter/main/MainPresenter.java
  17. 13 0
      student/src/main/java/com/cooleshow/student/presenter/main/MinePresenter.java
  18. 15 0
      student/src/main/java/com/cooleshow/student/presenter/main/ShopMallPresenter.java
  19. 41 0
      student/src/main/java/com/cooleshow/student/ui/main/CourseTableFragment.java
  20. 41 0
      student/src/main/java/com/cooleshow/student/ui/main/HomeFragment.java
  21. 165 1
      student/src/main/java/com/cooleshow/student/ui/main/MainActivity.java
  22. 41 0
      student/src/main/java/com/cooleshow/student/ui/main/MineFragment.java
  23. 41 0
      student/src/main/java/com/cooleshow/student/ui/main/ShopMallFragment.java
  24. 30 0
      student/src/main/res/layout/activity_main.xml
  25. 15 0
      student/src/main/res/layout/fragment_home_layout.xml
  26. 15 0
      student/src/main/res/layout/fragment_mine_layout.xml
  27. 15 0
      student/src/main/res/layout/fragment_shopmal.xml
  28. 1 1
      teacher/src/main/AndroidManifest.xml

+ 0 - 16
BaseLibrary/src/main/res/values-night/themes.xml

@@ -1,16 +0,0 @@
-<resources xmlns:tools="http://schemas.android.com/tools">
-    <!-- Base application theme. -->
-    <style name="Theme.CooleShow" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
-        <!-- Primary brand color. -->
-        <item name="colorPrimary">@color/purple_200</item>
-        <item name="colorPrimaryVariant">@color/purple_700</item>
-        <item name="colorOnPrimary">@color/black</item>
-        <!-- Secondary brand color. -->
-        <item name="colorSecondary">@color/teal_200</item>
-        <item name="colorSecondaryVariant">@color/teal_200</item>
-        <item name="colorOnSecondary">@color/black</item>
-        <!-- Status bar color. -->
-        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
-        <!-- Customize your theme here. -->
-    </style>
-</resources>

+ 2 - 18
BaseLibrary/src/main/res/values/styles.xml

@@ -83,23 +83,7 @@
     <style name="TabLayoutTextStyle">
         <item name="android:textSize">@dimen/text_big_size</item>
     </style>
-    <!-- TabLayout通用样式-->
-    <style name="TabsStyle">
-        <item name="android:layout_width">match_parent</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="tabIndicatorColor">@color/common_white</item>
-        <item name="tabBackground">@drawable/tab_selector</item>
-        <item name="tabTextAppearance">@style/TabLayoutTextStyle</item>
-        <item name="tabTextColor">@color/text_light_dark</item>
-        <item name="tabSelectedTextColor">@color/common_white</item>
-    </style>
-    <!-- 订单中Tab样式-->
-    <style name="TabsStyle.Order" parent="@style/TabsStyle">
-        <item name="tabIndicatorColor">@color/common_blue</item>
-        <item name="tabBackground">@drawable/border_bottom</item>
-        <item name="tabTextColor">@color/text_normal</item>
-        <item name="tabSelectedTextColor">@color/common_blue</item>
-    </style>
+
     <!-- 横向分隔线 -->
     <style name="DividerFixedHeight">
         <item name="android:background">@color/common_divider</item>
@@ -224,7 +208,7 @@
     <style name="AppBarTheme" parent="Theme.AppCompat.Light.DarkActionBar">
         <item name="actionDropDownStyle">@style/AppBaseToolBarMenuDropDownStyle</item>
         <item name="actionOverflowMenuStyle">@style/AppBaseToolbarOverflowMenuStyle</item>
-        <item name="android:textColor">@color/black</item>
+        <item name="android:textColor">@color/common_black</item>
     </style>
 
     <style name="AppBaseToolBarMenuDropDownStyle" parent="@style/Widget.AppCompat.Light.DropDownItem.Spinner">

+ 6 - 4
BaseLibrary/src/main/res/values/themes.xml

@@ -2,13 +2,15 @@
     <!-- Base application theme. -->
     <style name="Theme.CooleShow" parent="Theme.AppCompat.NoActionBar">
         <!-- Primary brand color. -->
-        <item name="colorPrimary">@color/purple_500</item>
-        <item name="colorPrimaryVariant">@color/purple_700</item>
+        <item name="colorPrimary">@color/colorPrimary</item>
+        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+        <item name="colorAccent">@color/colorAccent</item>
+      <!--  <item name="colorPrimaryVariant">@color/purple_700</item>
         <item name="colorOnPrimary">@color/white</item>
-        <!-- Secondary brand color. -->
+        &lt;!&ndash; Secondary brand color. &ndash;&gt;
         <item name="colorSecondary">@color/teal_200</item>
         <item name="colorSecondaryVariant">@color/teal_700</item>
-        <item name="colorOnSecondary">@color/black</item>
+        <item name="colorOnSecondary">@color/black</item>-->
         <!-- Status bar color. -->
         <item name="android:statusBarColor" tools:targetApi="l">@color/transparent</item>
         <!-- Customize your theme here. -->

+ 1 - 1
config.gradle

@@ -7,7 +7,7 @@ ext {
     android = [
             stuApplicationId        : 'com.daya.studaya_android',
             teapplicationId         : 'com.dayayuemeng.teacher',
-            compileSdkVersion       : 31,
+            compileSdkVersion       : 30,
             buildToolsVersion       : "29.0.0",
             minSdkVersion           : 21,
             targetSdkVersion        : 29,

+ 4 - 0
student/src/main/AndroidManifest.xml

@@ -26,6 +26,10 @@
             android:name=".ui.splash.GuideActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
             android:screenOrientation="portrait" />
+
+        <activity
+            android:name=".ui.main.MainActivity"
+            android:exported="false"/>
     </application>
 
 </manifest>

+ 1 - 1
student/src/main/java/com/cooleshow/student/App.java

@@ -106,7 +106,7 @@ public class App extends BaseApplication {
 
     @Override
     public boolean isTeacherClient() {
-        return true;
+        return false;
     }
 }
 

+ 35 - 0
student/src/main/java/com/cooleshow/student/adapter/HomePageAdapter.java

@@ -0,0 +1,35 @@
+package com.cooleshow.student.adapter;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+import java.util.ArrayList;
+
+/**
+ * Author by pq, Date on 2022/4/20.
+ */
+public class HomePageAdapter extends FragmentStateAdapter {
+    private ArrayList<Fragment> mFragments;
+
+    public void setFragments(ArrayList<Fragment> fragments) {
+        this.mFragments = fragments;
+    }
+
+    public HomePageAdapter(@NonNull FragmentActivity fragmentActivity) {
+        super(fragmentActivity);
+    }
+
+    @NonNull
+    @Override
+    public Fragment createFragment(int position) {
+        Fragment fragment = mFragments.get(position);
+        return fragment;
+    }
+
+    @Override
+    public int getItemCount() {
+        return mFragments != null ? mFragments.size() : 0;
+    }
+}

+ 26 - 0
student/src/main/java/com/cooleshow/student/api/APIService.java

@@ -0,0 +1,26 @@
+package com.cooleshow.student.api;
+
+import static com.cooleshow.base.common.BaseConstant.AUTH_GROUP;
+
+import com.cooleshow.base.data.net.BaseResponse;
+import com.cooleshow.usercenter.bean.UserInfo;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.GET;
+
+/**
+ * 创建日期:2022/5/26 10:01
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface APIService {
+    /**
+     * 查询个人信息
+     *
+     * @param
+     * @return
+     */
+    @GET(AUTH_GROUP + "api/queryUserInfo")
+    Observable<BaseResponse<UserInfo>> getUserInfo();
+}

+ 17 - 0
student/src/main/java/com/cooleshow/student/contract/CourseTableContract.java

@@ -0,0 +1,17 @@
+package com.cooleshow.student.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+
+/**
+ * 创建日期:2022/5/26 10:15
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface CourseTableContract {
+    interface CourseTableView extends BaseView {
+    }
+
+    interface Presenter {
+    }
+}

+ 17 - 0
student/src/main/java/com/cooleshow/student/contract/HomeContract.java

@@ -0,0 +1,17 @@
+package com.cooleshow.student.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+
+/**
+ * 创建日期:2022/5/26 10:09
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface HomeContract {
+    interface HomeView extends BaseView {
+    }
+
+    interface Presenter {
+    }
+}

+ 20 - 0
student/src/main/java/com/cooleshow/student/contract/MainContract.java

@@ -0,0 +1,20 @@
+package com.cooleshow.student.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.usercenter.bean.UserInfo;
+
+/**
+ * 创建日期:2022/5/26 9:55
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface MainContract {
+    interface MainView extends BaseView {
+        void getUserInfoSuccess(UserInfo userInfo);
+    }
+
+    interface Presenter {
+        void getUserInfo();
+    }
+}

+ 17 - 0
student/src/main/java/com/cooleshow/student/contract/MineContract.java

@@ -0,0 +1,17 @@
+package com.cooleshow.student.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+
+/**
+ * 创建日期:2022/5/26 10:06
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface MineContract {
+    interface MineView extends BaseView {
+    }
+
+    interface Presenter {
+    }
+}

+ 17 - 0
student/src/main/java/com/cooleshow/student/contract/ShopMallContract.java

@@ -0,0 +1,17 @@
+package com.cooleshow.student.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+
+/**
+ * 创建日期:2022/5/26 10:12
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface ShopMallContract {
+    interface ShopMallView extends BaseView {
+    }
+
+    interface Presenter {
+    }
+}

+ 14 - 0
student/src/main/java/com/cooleshow/student/presenter/main/CourseTablePresenter.java

@@ -0,0 +1,14 @@
+package com.cooleshow.student.presenter.main;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.student.contract.CourseTableContract;
+
+/**
+ * 创建日期:2022/5/26 10:15
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class CourseTablePresenter extends BasePresenter<CourseTableContract.CourseTableView> implements CourseTableContract.Presenter {
+
+}

+ 14 - 0
student/src/main/java/com/cooleshow/student/presenter/main/HomePresenter.java

@@ -0,0 +1,14 @@
+package com.cooleshow.student.presenter.main;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.student.contract.HomeContract;
+import com.cooleshow.student.contract.MineContract;
+
+/**
+ * 创建日期:2022/5/26 10:09
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class HomePresenter extends BasePresenter<HomeContract.HomeView> implements HomeContract.Presenter {
+}

+ 33 - 0
student/src/main/java/com/cooleshow/student/presenter/main/MainPresenter.java

@@ -0,0 +1,33 @@
+package com.cooleshow.student.presenter.main;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.student.api.APIService;
+import com.cooleshow.student.contract.MainContract;
+import com.cooleshow.usercenter.bean.UserInfo;
+
+
+/**
+ * 创建日期:2022/5/26 9:54
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class MainPresenter extends BasePresenter<MainContract.MainView> implements MainContract.Presenter {
+    /**
+     * 查询UserInfo
+     *
+     * @param
+     */
+    @Override
+    public void getUserInfo() {
+        addSubscribe(create(APIService.class).getUserInfo(), new BaseObserver<UserInfo>(getView()) {
+            @Override
+            protected void onSuccess(UserInfo data) {
+                if (getView() != null) {
+                    getView().getUserInfoSuccess(data);
+                }
+            }
+        });
+    }
+}

+ 13 - 0
student/src/main/java/com/cooleshow/student/presenter/main/MinePresenter.java

@@ -0,0 +1,13 @@
+package com.cooleshow.student.presenter.main;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.student.contract.MineContract;
+
+/**
+ * 创建日期:2022/5/26 10:05
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class MinePresenter extends BasePresenter<MineContract.MineView> implements MineContract.Presenter {
+}

+ 15 - 0
student/src/main/java/com/cooleshow/student/presenter/main/ShopMallPresenter.java

@@ -0,0 +1,15 @@
+package com.cooleshow.student.presenter.main;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.student.contract.ShopMallContract;
+
+/**
+ * 创建日期:2022/5/26 10:11
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class ShopMallPresenter extends BasePresenter<ShopMallContract.ShopMallView> implements ShopMallContract.Presenter {
+
+
+}

+ 41 - 0
student/src/main/java/com/cooleshow/student/ui/main/CourseTableFragment.java

@@ -0,0 +1,41 @@
+package com.cooleshow.student.ui.main;
+
+import android.view.View;
+
+import com.cooleshow.base.ui.fragment.BaseMVPFragment;
+import com.cooleshow.student.contract.CourseTableContract;
+import com.cooleshow.student.databinding.FragmentShopmalBinding;
+import com.cooleshow.student.presenter.main.CourseTablePresenter;
+
+/**
+ * 创建日期:2022/5/26 10:14
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class CourseTableFragment extends BaseMVPFragment<FragmentShopmalBinding, CourseTablePresenter> implements CourseTableContract.CourseTableView, View.OnClickListener {
+    @Override
+    public void onClick(View view) {
+
+    }
+
+    @Override
+    protected FragmentShopmalBinding getLayoutView() {
+        return FragmentShopmalBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected CourseTablePresenter createPresenter() {
+        return new CourseTablePresenter();
+    }
+
+    @Override
+    protected void initView(View rootView) {
+
+    }
+
+    @Override
+    protected void initData() {
+
+    }
+}

+ 41 - 0
student/src/main/java/com/cooleshow/student/ui/main/HomeFragment.java

@@ -0,0 +1,41 @@
+package com.cooleshow.student.ui.main;
+
+import android.view.View;
+
+import com.cooleshow.base.ui.fragment.BaseMVPFragment;
+import com.cooleshow.student.contract.HomeContract;
+import com.cooleshow.student.databinding.FragmentHomeLayoutBinding;
+import com.cooleshow.student.presenter.main.HomePresenter;
+
+/**
+ * 创建日期:2022/5/26 10:03
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class HomeFragment extends BaseMVPFragment<FragmentHomeLayoutBinding, HomePresenter> implements HomeContract.HomeView, View.OnClickListener {
+    @Override
+    public void onClick(View view) {
+
+    }
+
+    @Override
+    protected FragmentHomeLayoutBinding getLayoutView() {
+        return FragmentHomeLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected HomePresenter createPresenter() {
+        return new HomePresenter();
+    }
+
+    @Override
+    protected void initView(View rootView) {
+
+    }
+
+    @Override
+    protected void initData() {
+
+    }
+}

+ 165 - 1
student/src/main/java/com/cooleshow/student/ui/main/MainActivity.java

@@ -1,10 +1,174 @@
 package com.cooleshow.student.ui.main;
 
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.MenuItem;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.common.im.ui.MessageFragment;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.LogUtils;
+import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
+import com.cooleshow.student.R;
+import com.cooleshow.student.adapter.HomePageAdapter;
+import com.cooleshow.student.contract.MainContract;
+import com.cooleshow.student.databinding.ActivityMainBinding;
+import com.cooleshow.student.presenter.main.MainPresenter;
+import com.cooleshow.usercenter.bean.UserInfo;
+import com.cooleshow.usercenter.helper.UserHelper;
+import com.daya.live_teaching.common.ResultCallback;
+import com.daya.live_teaching.im.IMManager;
+import com.google.android.material.bottomnavigation.BottomNavigationView;
+
+import java.util.ArrayList;
+
+import io.rong.imlib.RongIMClient;
+
 /**
  * 创建日期:2022/5/25 18:02
  *
  * @author Ryan
  * 类说明:
  */
-public class MainActivity {
+@Route(path = RouterPath.APPCenter.PATH_HOME)
+public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPresenter> implements MainContract.MainView {
+    private ArrayList<Fragment> mFragments = new ArrayList<>();
+    private HomeFragment mHomeFragment;
+    private MineFragment mMineFragment;
+    private ShopMallFragment shopMallFragment;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        QMUIStatusBarHelper.setStatusBarLightMode(this);
+    }
+
+    @Override
+    protected void initView() {
+        HomePageAdapter homePageAdapter = new HomePageAdapter(this);
+        mHomeFragment = new HomeFragment();
+        CourseTableFragment courseTableFragment = new CourseTableFragment();
+        MessageFragment messageFragment = new MessageFragment();
+        shopMallFragment = new ShopMallFragment();
+        mMineFragment = new MineFragment();
+        mFragments.add(mHomeFragment);
+        mFragments.add(courseTableFragment);
+        mFragments.add(messageFragment);
+        mFragments.add(shopMallFragment);
+        mFragments.add(mMineFragment);
+        homePageAdapter.setFragments(mFragments);
+        getViewBinding().viewPager.setAdapter(homePageAdapter);
+        getViewBinding().viewPager.setOffscreenPageLimit(mFragments.size());
+        getViewBinding().viewPager.setUserInputEnabled(false);
+        getViewBinding().navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
+            @Override
+            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
+                return onTabClick(item.getItemId());
+            }
+        });
+    }
+
+    @Override
+    public void onBackPressed() {
+        int currentItem = getViewBinding().viewPager.getCurrentItem();
+        if (currentItem == 3) {
+            //商城
+            if (null!=shopMallFragment){
+//                shopMallFragment.clickBack();
+            }
+        } else {
+            super.onBackPressed();
+        }
+    }
+
+    public void clickBackPressed(){
+        super.onBackPressed();
+    }
+
+    @Override
+    public void initData() {
+        super.initData();
+        connectIM();
+    }
+
+    /**
+     * 连接rong IM
+     */
+    private void connectIM() {
+        if (UserHelper.isLogin()) {
+            String userIMToken = UserHelper.getUserIMToken();
+            if (!TextUtils.isEmpty(userIMToken)) {
+                RongIMClient.ConnectionStatusListener.ConnectionStatus currentConnectionStatus = RongIMClient.getInstance().getCurrentConnectionStatus();
+                if (currentConnectionStatus != RongIMClient.ConnectionStatusListener.ConnectionStatus.CONNECTED) {
+                    IMManager.getInstance().login(userIMToken, new ResultCallback<String>() {
+                        @Override
+                        public void onSuccess(String s) {
+                            LogUtils.i("im connect success:" + s);
+                        }
+
+                        @Override
+                        public void onFail(int errorCode, String errorStr) {
+                            LogUtils.i("im connect fail:" + errorStr + "-errorCode:" + errorCode);
+                        }
+                    });
+                }
+            }
+        }
+    }
+
+
+    private boolean onTabClick(int viewId) {
+        if (viewId == R.id.menu_home) {
+            getViewBinding().viewPager.setCurrentItem(0, false);
+            return true;
+        }
+        if (viewId == R.id.menu_coursetable) {
+            getViewBinding().viewPager.setCurrentItem(1, false);
+            return true;
+        }
+        if (viewId == R.id.menu_chat) {
+            getViewBinding().viewPager.setCurrentItem(2, false);
+            return true;
+        }
+        if (viewId == R.id.menu_mall) {
+            getViewBinding().viewPager.setCurrentItem(3, false);
+            return true;
+        }
+        if (viewId == R.id.menu_mine) {
+            getViewBinding().viewPager.setCurrentItem(4, false);
+        }
+        return true;
+    }
+    @Override
+    protected void onResume() {
+        super.onResume();
+        presenter.getUserInfo();
+
+    }
+
+
+    @Override
+    public void getUserInfoSuccess(UserInfo userInfo) {
+        if (isFinishing() || isDestroyed()) {
+            return;
+        }
+        //存储userInfo信息
+        UserHelper.saveUserInfo(userInfo);
+
+    }
+
+    @Override
+    protected ActivityMainBinding getLayoutView() {
+        return ActivityMainBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected MainPresenter createPresenter() {
+        return new MainPresenter();
+    }
 }

+ 41 - 0
student/src/main/java/com/cooleshow/student/ui/main/MineFragment.java

@@ -0,0 +1,41 @@
+package com.cooleshow.student.ui.main;
+
+import android.view.View;
+
+import com.cooleshow.base.ui.fragment.BaseMVPFragment;
+import com.cooleshow.student.contract.MineContract;
+import com.cooleshow.student.databinding.FragmentMineLayoutBinding;
+import com.cooleshow.student.presenter.main.MinePresenter;
+
+/**
+ * 创建日期:2022/5/26 10:03
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class MineFragment extends BaseMVPFragment<FragmentMineLayoutBinding, MinePresenter> implements MineContract.MineView, View.OnClickListener {
+    @Override
+    public void onClick(View view) {
+
+    }
+
+    @Override
+    protected FragmentMineLayoutBinding getLayoutView() {
+        return FragmentMineLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected MinePresenter createPresenter() {
+        return new MinePresenter();
+    }
+
+    @Override
+    protected void initView(View rootView) {
+
+    }
+
+    @Override
+    protected void initData() {
+
+    }
+}

+ 41 - 0
student/src/main/java/com/cooleshow/student/ui/main/ShopMallFragment.java

@@ -0,0 +1,41 @@
+package com.cooleshow.student.ui.main;
+
+import android.view.View;
+
+import com.cooleshow.base.ui.fragment.BaseMVPFragment;
+import com.cooleshow.student.contract.ShopMallContract;
+import com.cooleshow.student.databinding.FragmentShopmalBinding;
+import com.cooleshow.student.presenter.main.ShopMallPresenter;
+
+/**
+ * 创建日期:2022/5/26 10:10
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class ShopMallFragment extends BaseMVPFragment<FragmentShopmalBinding, ShopMallPresenter> implements ShopMallContract.ShopMallView, View.OnClickListener {
+    @Override
+    public void onClick(View view) {
+
+    }
+
+    @Override
+    protected FragmentShopmalBinding getLayoutView() {
+        return FragmentShopmalBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected ShopMallPresenter createPresenter() {
+        return new ShopMallPresenter();
+    }
+
+    @Override
+    protected void initView(View rootView) {
+
+    }
+
+    @Override
+    protected void initData() {
+
+    }
+}

+ 30 - 0
student/src/main/res/layout/activity_main.xml

@@ -0,0 +1,30 @@
+<?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"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".ui.main.MainActivity">
+
+    <androidx.viewpager2.widget.ViewPager2
+        android:id="@+id/view_pager"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toTopOf="@+id/navigation"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <com.google.android.material.bottomnavigation.BottomNavigationView
+        android:id="@+id/navigation"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@color/white"
+        app:itemBackground="@null"
+        app:itemIconSize="24dp"
+        app:itemTextAppearanceActive="@style/bottom_tab_title_active"
+        app:itemTextAppearanceInactive="@style/bottom_tab_title_inactive"
+        app:labelVisibilityMode="labeled"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/view_pager"
+        app:menu="@menu/bottom_nav_item"
+        tools:ignore="MissingConstraints" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 15 - 0
student/src/main/res/layout/fragment_home_layout.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+
+    <TextView
+        android:layout_width="100dp"
+        android:layout_height="100dp"
+        android:layout_centerInParent="true"
+        android:gravity="center"
+        android:text="home"
+        android:textSize="32sp" />
+
+</RelativeLayout>

+ 15 - 0
student/src/main/res/layout/fragment_mine_layout.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+
+    <TextView
+        android:layout_width="100dp"
+        android:layout_height="100dp"
+        android:layout_centerInParent="true"
+        android:gravity="center"
+        android:text="我的"
+        android:textSize="32sp" />
+
+</RelativeLayout>

+ 15 - 0
student/src/main/res/layout/fragment_shopmal.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+
+    <TextView
+        android:layout_width="100dp"
+        android:layout_height="100dp"
+        android:layout_centerInParent="true"
+        android:gravity="center"
+        android:text="商城"
+        android:textSize="32sp" />
+
+</RelativeLayout>

+ 1 - 1
teacher/src/main/AndroidManifest.xml

@@ -23,7 +23,7 @@
             </intent-filter>
         </activity>
         <activity
-            android:name="com.cooleshow.teacher.ui.main.MainActivity"
+            android:name=".ui.main.MainActivity"
             android:exported="false"/>
         <activity
             android:name=".ui.splash.GuideActivity"