Administrator
2021-11-03 de74e5ec3fbdab065e8b91240fa1944c4b3440c2
部分调整
2 files deleted
4 files added
5 files renamed
7 files modified
348 ■■■■■ changed files
app/src/main/java/com/duqing/missions/MainActivity.java 41 ●●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/base/FragmentAdapter.java 49 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/ui/main/dashboard/DashboardFragment.java 23 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/ui/main/hall/HallFragment.java 49 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/ui/main/hall/HallViewModel.java 6 ●●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/ui/main/hall/SubHallFragment.java 17 ●●●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/ui/main/home/HomeFragment.java 4 ●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/ui/main/mine/MineFragment.java 10 ●●●● patch | view | raw | blame | history
app/src/main/java/com/duqing/missions/ui/main/mine/MineViewModel.java 6 ●●●● patch | view | raw | blame | history
app/src/main/res/color/radio_text.xml 4 ●●● patch | view | raw | blame | history
app/src/main/res/layout/activity_main.xml 24 ●●●● patch | view | raw | blame | history
app/src/main/res/layout/activity_vip.xml 1 ●●●● patch | view | raw | blame | history
app/src/main/res/layout/fragment_hall.xml 33 ●●●●● patch | view | raw | blame | history
app/src/main/res/layout/fragment_mine.xml 2 ●●● patch | view | raw | blame | history
app/src/main/res/layout/fragment_sub_hall.xml 48 ●●●● patch | view | raw | blame | history
app/src/main/res/layout/home_item_top.xml 2 ●●● patch | view | raw | blame | history
app/src/main/res/menu/bottom_nav_menu.xml 4 ●●●● patch | view | raw | blame | history
app/src/main/res/navigation/mobile_navigation.xml 25 ●●●●● patch | view | raw | blame | history
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