app/src/main/java/com/duqing/missions/MainActivity.java
@@ -1,21 +1,48 @@ package com.duqing.missions; import androidx.navigation.NavController; import androidx.navigation.Navigation; import androidx.navigation.ui.NavigationUI; import androidx.viewpager2.widget.ViewPager2; import com.duqing.missions.base.BaseActivity; import com.duqing.missions.base.FragmentAdapter; import com.duqing.missions.databinding.ActivityMainBinding; import com.duqing.missions.ui.main.hall.HallFragment; import com.duqing.missions.ui.main.home.HomeFragment; import com.duqing.missions.ui.main.mine.MineFragment; public class MainActivity extends BaseActivity<ActivityMainBinding> { @Override public void initViews() { // Passing each menu ID as a set of Ids because each // menu should be considered as top level destinations. NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main); NavigationUI.setupWithNavController(binding.navView, navController); setStatusBarBgColor(R.color.red); setStatusBarTextColor(false); binding.navView.setOnItemSelectedListener(item -> { for(int i = 0 ; i < binding.navView.getMenu().size() ; i ++){ if(item.getItemId() == binding.navView.getMenu().getItem(i).getItemId()){ binding.viewPager2.setCurrentItem(i); return true; } } return false; }); final FragmentAdapter fragmentAdapter = new FragmentAdapter(this); fragmentAdapter.addFragment(new HomeFragment()); fragmentAdapter.addFragment(new HallFragment()); fragmentAdapter.addFragment(new MineFragment()); //设置当前可见Item左右可见page数,次范围内不会被销毁 //禁用预加载 binding.viewPager2.setOffscreenPageLimit(ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT); binding.viewPager2.setAdapter(fragmentAdapter); binding.viewPager2.setCurrentItem(0); binding.viewPager2.setUserInputEnabled(false); //true:滑动,false:禁止滑动 binding.viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageSelected(int position) { binding.navView.getMenu().getItem(position).setChecked(true); } }); binding.viewPager2.setCurrentItem(0);//设置默认第 } } app/src/main/java/com/duqing/missions/base/FragmentAdapter.java
New file @@ -0,0 +1,49 @@ package com.duqing.missions.base; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.viewpager2.adapter.FragmentStateAdapter; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2021/11/3 0003. */ public class FragmentAdapter extends FragmentStateAdapter { private List<BaseFragment> fragments = new ArrayList<>(); public FragmentAdapter(@NonNull FragmentActivity fragmentActivity) { super(fragmentActivity); } public void setFragments(List<BaseFragment> fragments) { this.fragments = fragments; } public void removeFragment(BaseFragment fragment){ this.fragments.remove(fragment); } public void removeFragment(int index){ this.fragments.remove(index); } public void addFragment(BaseFragment fragment){ fragments.add(fragment); } @NonNull @Override public Fragment createFragment(int position) { return fragments.get(position); } @Override public int getItemCount() { return fragments.size(); } } app/src/main/java/com/duqing/missions/ui/main/dashboard/DashboardFragment.java
File was deleted app/src/main/java/com/duqing/missions/ui/main/hall/HallFragment.java
New file @@ -0,0 +1,49 @@ package com.duqing.missions.ui.main.hall; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import androidx.viewpager2.widget.ViewPager2; import com.duqing.missions.base.BaseFragment; import com.duqing.missions.base.FragmentAdapter; import com.duqing.missions.databinding.FragmentHallBinding; import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayoutMediator; public class HallFragment extends BaseFragment<FragmentHallBinding> { private HallViewModel hallViewModel; @Override public void initViews() { hallViewModel = new ViewModelProvider(this).get(HallViewModel.class); hallViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() { @Override public void onChanged(@Nullable String s) { } }); final String[] titles = new String[]{"全部","人气","简单","高价"}; final FragmentAdapter fragmentAdapter = new FragmentAdapter(activity); fragmentAdapter.addFragment(new SubHallFragment()); fragmentAdapter.addFragment(new SubHallFragment()); fragmentAdapter.addFragment(new SubHallFragment()); fragmentAdapter.addFragment(new SubHallFragment()); //设置当前可见Item左右可见page数,次范围内不会被销毁 //禁用预加载 binding.viewPager2.setOffscreenPageLimit(ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT); binding.viewPager2.setAdapter(fragmentAdapter); binding.viewPager2.setCurrentItem(0); binding.viewPager2.setUserInputEnabled(false); //true:滑动,false:禁止滑动 TabLayoutMediator mediator = new TabLayoutMediator(binding.tablayout, binding.viewPager2, new TabLayoutMediator.TabConfigurationStrategy() { @Override public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { tab.setText(titles[position]); } }); mediator.attach(); } } app/src/main/java/com/duqing/missions/ui/main/hall/HallViewModel.java
File was renamed from app/src/main/java/com/duqing/missions/ui/main/dashboard/DashboardViewModel.java @@ -1,14 +1,14 @@ package com.duqing.missions.ui.main.dashboard; package com.duqing.missions.ui.main.hall; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; public class DashboardViewModel extends ViewModel { public class HallViewModel extends ViewModel { private MutableLiveData<String> mText; public DashboardViewModel() { public HallViewModel() { mText = new MutableLiveData<>(); mText.setValue("This is dashboard fragment"); } app/src/main/java/com/duqing/missions/ui/main/hall/SubHallFragment.java
New file @@ -0,0 +1,17 @@ package com.duqing.missions.ui.main.hall; import com.duqing.missions.base.BaseFragment; import com.duqing.missions.databinding.FragmentSubHallBinding; /** * Created by Administrator on 2021/11/3 0003. */ public class SubHallFragment extends BaseFragment<FragmentSubHallBinding> { @Override public void initViews() { } } app/src/main/java/com/duqing/missions/ui/main/home/HomeFragment.java
@@ -6,7 +6,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; @@ -40,12 +39,11 @@ @Override public void initViews() { homeViewModel = new ViewModelProvider(this).get(HomeViewModel.class); binding.imgSearch.setOnClickListener(v -> startActivity(new Intent(getContext(), LoginActivity.class))); binding.textSearch.setOnClickListener(v -> startActivity(new Intent(getContext(), LoginActivity.class))); final SmartRefreshLayout smartRefresh = binding.smartRefresh; smartRefresh.setRefreshHeader(new ClassicsHeader(getContext())); smartRefresh.setRefreshFooter(new ClassicsFooter(getContext())); final TextView textView = binding.textRecommend; final ImageView imgSearch = binding.imgSearch; RecyclerView recyclerClassify = binding.recyclerClassify; RecyclerView recyclerTop = binding.recyclerTop; final RecyclerView recyclerRecommend = binding.recyclerRecommend; app/src/main/java/com/duqing/missions/ui/main/mine/MineFragment.java
File was renamed from app/src/main/java/com/duqing/missions/ui/main/notifications/NotificationsFragment.java @@ -1,20 +1,20 @@ package com.duqing.missions.ui.main.notifications; package com.duqing.missions.ui.main.mine; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import com.duqing.missions.base.BaseFragment; import com.duqing.missions.databinding.FragmentNotificationsBinding; import com.duqing.missions.databinding.FragmentMineBinding; public class NotificationsFragment extends BaseFragment<FragmentNotificationsBinding> { public class MineFragment extends BaseFragment<FragmentMineBinding> { private NotificationsViewModel notificationsViewModel; private MineViewModel notificationsViewModel; @Override public void initViews() { notificationsViewModel = new ViewModelProvider(this).get(NotificationsViewModel.class); notificationsViewModel = new ViewModelProvider(this).get(MineViewModel.class); notificationsViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() { @Override public void onChanged(@Nullable String s) { app/src/main/java/com/duqing/missions/ui/main/mine/MineViewModel.java
File was renamed from app/src/main/java/com/duqing/missions/ui/main/notifications/NotificationsViewModel.java @@ -1,14 +1,14 @@ package com.duqing.missions.ui.main.notifications; package com.duqing.missions.ui.main.mine; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; public class NotificationsViewModel extends ViewModel { public class MineViewModel extends ViewModel { private MutableLiveData<String> mText; public NotificationsViewModel() { public MineViewModel() { mText = new MutableLiveData<>(); mText.setValue("This is notifications fragment"); } app/src/main/res/color/radio_text.xml
@@ -1,7 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" tools:ignore="MissingDefaultResource"> <item android:state_enabled="true" android:color="@color/black_4" /> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_checked="true" android:color="@color/sky" /> <item android:state_pressed="true" android:color="@color/white" /> <item android:color="@color/black" /> </selector> app/src/main/res/layout/activity_main.xml
@@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/container" @@ -7,21 +7,23 @@ android:layout_height="match_parent" android:orientation="vertical"> <fragment android:id="@+id/nav_host_fragment_activity_main" android:name="androidx.navigation.fragment.NavHostFragment" <androidx.viewpager2.widget.ViewPager2 android:id="@+id/view_pager_2" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" app:defaultNavHost="true" app:navGraph="@navigation/mobile_navigation" /> android:layout_height="0dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintBottom_toTopOf="@id/nav_view" /> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/nav_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/windowBackground" app:layout_constraintTop_toBottomOf="@id/view_pager_2" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:menu="@menu/bottom_nav_menu"/> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/layout/activity_vip.xml
@@ -38,7 +38,6 @@ <include layout="@layout/fragment_employer_vip" android:id="@+id/nav_host_fragment_activity_main" android:layout_width="match_parent" android:layout_height="0dp" app:defaultNavHost="true" app/src/main/res/layout/fragment_hall.xml
New file @@ -0,0 +1,33 @@ <?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.hall.HallFragment" > <com.google.android.material.tabs.TabLayout android:id="@+id/tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/red" app:tabMaxWidth="0dp" app:tabIndicatorFullWidth="false" app:tabSelectedTextColor="@color/white" app:tabTextColor="@color/enable" app:tabIndicatorColor="@color/white" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <androidx.viewpager2.widget.ViewPager2 android:id="@+id/view_pager_2" android:layout_width="match_parent" android:layout_height="0dp" android:nestedScrollingEnabled="false" app:layout_constraintTop_toBottomOf="@id/tablayout" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/layout/fragment_mine.xml
File was renamed from app/src/main/res/layout/fragment_notifications.xml @@ -6,7 +6,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white_2" tools:context=".ui.main.notifications.NotificationsFragment"> tools:context=".ui.main.mine.MineFragment"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" app/src/main/res/layout/fragment_sub_hall.xml
File was renamed from app/src/main/res/layout/fragment_dashboard.xml @@ -1,39 +1,9 @@ <?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" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.main.dashboard.DashboardFragment" > xmlns:app="http://schemas.android.com/apk/res-auto"> <com.google.android.material.tabs.TabLayout android:id="@+id/tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent"> <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全部" /> <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="人气" /> <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="简单" /> <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="高价" /> </com.google.android.material.tabs.TabLayout> <RadioGroup android:id="@+id/radio_group" @@ -41,7 +11,7 @@ android:layout_height="40dp" app:layout_constraintHorizontal_chainStyle="spread" app:layout_constraintHorizontal_weight="4" app:layout_constraintTop_toBottomOf="@id/tablayout" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@id/txt_classify" android:orientation="horizontal"> @@ -88,7 +58,7 @@ android:gravity="center" android:textColor="@color/radio_text" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/tablayout" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toRightOf="@id/radio_group" app:layout_constraintHorizontal_weight="1" app:layout_constraintHorizontal_chainStyle="spread" /> @@ -99,13 +69,11 @@ android:layout_height="0.5dp" android:background="@color/gray" app:layout_constraintTop_toBottomOf="@id/radio_group" app:layout_constraintLeft_toLeftOf="parent"/> <FrameLayout android:id="@+id/framelayout" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> <include layout="@layout/refresh_recycler" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintTop_toBottomOf="@id/view" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" /> app:layout_constraintBottom_toBottomOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/layout/home_item_top.xml
@@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_border_gray_corner" android:background="@drawable/bg_white_corner" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_marginRight="5dp" app/src/main/res/menu/bottom_nav_menu.xml
@@ -7,12 +7,12 @@ android:title="@string/title_home"/> <item android:id="@+id/navigation_dashboard" android:id="@+id/navigation_hall" android:icon="@drawable/ic_dashboard_black_24dp" android:title="@string/title_dashboard"/> <item android:id="@+id/navigation_notifications" android:id="@+id/navigation_mine" android:icon="@drawable/ic_notifications_black_24dp" android:title="@string/title_notifications"/> app/src/main/res/navigation/mobile_navigation.xml
File was deleted