diff --git a/app/build.gradle b/app/build.gradle index fd11212..5af4383 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -74,6 +74,8 @@ dependencies { // 弹窗组件 implementation 'com.github.li-xiaojun:XPopup:2.9.19' implementation 'com.github.li-xiaojun:EasyAdapter:1.2.9' + // table layout 组件 + implementation 'io.github.h07000223:flycoTabLayout:3.0.0' // hutool 工具 implementation 'cn.hutool:hutool-core:5.0.7' diff --git a/app/src/main/java/cc/niushuai/dididone/ui/base/InitAndSetListener.java b/app/src/main/java/cc/niushuai/dididone/ui/base/InitAndSetListener.java index 07d2b0f..62fee0e 100644 --- a/app/src/main/java/cc/niushuai/dididone/ui/base/InitAndSetListener.java +++ b/app/src/main/java/cc/niushuai/dididone/ui/base/InitAndSetListener.java @@ -5,10 +5,10 @@ public interface InitAndSetListener { /** * 初始化数据 */ - void init(); + default void init() {} /** * 控件添加监听器 */ - void setListeners(); + default void setListeners() {} } diff --git a/app/src/main/java/cc/niushuai/dididone/ui/statistic/MyPagerAdapter.java b/app/src/main/java/cc/niushuai/dididone/ui/statistic/MyPagerAdapter.java new file mode 100644 index 0000000..fdcb69d --- /dev/null +++ b/app/src/main/java/cc/niushuai/dididone/ui/statistic/MyPagerAdapter.java @@ -0,0 +1,34 @@ +package cc.niushuai.dididone.ui.statistic; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + +import java.util.List; + +import cc.niushuai.dididone.ui.statistic.charts.BaseChartFragment; + +public class MyPagerAdapter extends FragmentPagerAdapter { + List fragmentList; + + //构造方法,方便之后赋值调用 + public MyPagerAdapter(FragmentManager fm, List fragmentList){ + super(fm); + this.fragmentList = fragmentList; + } + + //根据Item的位置返回对应位置的Fragment,绑定item和Fragment + @NonNull + @Override + public BaseChartFragment getItem(int position) { + return fragmentList.get(position); + } + + //设置item的数量 + + @Override + public int getCount() { + return fragmentList.size(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cc/niushuai/dididone/ui/statistic/StatisticFragment.java b/app/src/main/java/cc/niushuai/dididone/ui/statistic/StatisticFragment.java index b753c7c..1b96a03 100644 --- a/app/src/main/java/cc/niushuai/dididone/ui/statistic/StatisticFragment.java +++ b/app/src/main/java/cc/niushuai/dididone/ui/statistic/StatisticFragment.java @@ -4,13 +4,25 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; +import androidx.viewpager.widget.ViewPager; + +import com.flyco.tablayout.SlidingTabLayout; +import com.google.android.material.tabs.TabLayout; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; import cc.niushuai.dididone.databinding.FragmentStatisticBinding; +import cc.niushuai.dididone.ui.statistic.charts.BaseChartFragment; +import cc.niushuai.dididone.ui.statistic.charts.ListFragment; +import cc.niushuai.dididone.ui.statistic.charts.MonthFragment; +import cc.niushuai.dididone.ui.statistic.charts.OtherFragment; +import cc.niushuai.dididone.ui.statistic.charts.WeekFragment; public class StatisticFragment extends Fragment { @@ -24,8 +36,24 @@ public class StatisticFragment extends Fragment { binding = FragmentStatisticBinding.inflate(inflater, container, false); View root = binding.getRoot(); - final TextView textView = binding.textGallery; - statisticViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + + ViewPager viewPager = binding.statViewpager; + SlidingTabLayout tabLayout = binding.statTabLayout; + + // 初始化所有的fragment + List fragments = new ArrayList<>(); + fragments.add(new ListFragment()); + fragments.add(new WeekFragment()); + fragments.add(new MonthFragment()); + fragments.add(new OtherFragment()); + + MyPagerAdapter adapter = new MyPagerAdapter(getActivity().getSupportFragmentManager(), fragments); + //绑定adapter + viewPager.setAdapter(adapter); + //绑定viewPager + List titles = fragments.stream().map(BaseChartFragment::getTitle).collect(Collectors.toList()); + tabLayout.setViewPager(viewPager, titles.toArray(new String[0])); + return root; } diff --git a/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/BaseChartFragment.java b/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/BaseChartFragment.java new file mode 100644 index 0000000..9178f9a --- /dev/null +++ b/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/BaseChartFragment.java @@ -0,0 +1,16 @@ +package cc.niushuai.dididone.ui.statistic.charts; + +import cc.niushuai.dididone.ui.base.BaseFragment; + +public class BaseChartFragment extends BaseFragment { + + private String mTitle; + + public BaseChartFragment(String mTitle) { + this.mTitle = mTitle; + } + + public String getTitle() { + return mTitle; + } +} diff --git a/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/ListFragment.java b/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/ListFragment.java new file mode 100644 index 0000000..41c350d --- /dev/null +++ b/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/ListFragment.java @@ -0,0 +1,27 @@ +package cc.niushuai.dididone.ui.statistic.charts; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import cc.niushuai.dididone.R; + +public class ListFragment extends BaseChartFragment { + + + public ListFragment() { + super("列表视图"); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_stat_list, container, false); + return view; + } + +} \ No newline at end of file diff --git a/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/MonthFragment.java b/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/MonthFragment.java new file mode 100644 index 0000000..e58ddca --- /dev/null +++ b/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/MonthFragment.java @@ -0,0 +1,26 @@ +package cc.niushuai.dididone.ui.statistic.charts; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import cc.niushuai.dididone.R; + +public class MonthFragment extends BaseChartFragment{ + + public MonthFragment() { + super("月视图"); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_stat_month, container, false); + return view; + } + +} diff --git a/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/OtherFragment.java b/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/OtherFragment.java new file mode 100644 index 0000000..c1d26b3 --- /dev/null +++ b/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/OtherFragment.java @@ -0,0 +1,26 @@ +package cc.niushuai.dididone.ui.statistic.charts; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import cc.niushuai.dididone.R; + +public class OtherFragment extends BaseChartFragment{ + + public OtherFragment() { + super("其他"); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_stat_other, container, false); + return view; + } + +} diff --git a/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/WeekFragment.java b/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/WeekFragment.java new file mode 100644 index 0000000..c6deec4 --- /dev/null +++ b/app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/WeekFragment.java @@ -0,0 +1,25 @@ +package cc.niushuai.dididone.ui.statistic.charts; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import cc.niushuai.dididone.R; + +public class WeekFragment extends BaseChartFragment { + + public WeekFragment() { + super("周视图"); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_stat_week, container, false); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_stat_list.xml b/app/src/main/res/layout/fragment_stat_list.xml new file mode 100644 index 0000000..cbcdf3d --- /dev/null +++ b/app/src/main/res/layout/fragment_stat_list.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_stat_month.xml b/app/src/main/res/layout/fragment_stat_month.xml new file mode 100644 index 0000000..a2cc288 --- /dev/null +++ b/app/src/main/res/layout/fragment_stat_month.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_stat_other.xml b/app/src/main/res/layout/fragment_stat_other.xml new file mode 100644 index 0000000..916acdf --- /dev/null +++ b/app/src/main/res/layout/fragment_stat_other.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_stat_week.xml b/app/src/main/res/layout/fragment_stat_week.xml new file mode 100644 index 0000000..05a89fe --- /dev/null +++ b/app/src/main/res/layout/fragment_stat_week.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_statistic.xml b/app/src/main/res/layout/fragment_statistic.xml index 3fa4067..55d7eef 100644 --- a/app/src/main/res/layout/fragment_statistic.xml +++ b/app/src/main/res/layout/fragment_statistic.xml @@ -1,22 +1,33 @@ - - + android:orientation="vertical"> - + - \ No newline at end of file + android:layout_height="48dp" + android:background="#EEEEEE" + tl:tl_divider_color="#1A000000" + tl:tl_divider_padding="13dp" + tl:tl_divider_width="1dp" + tl:tl_indicator_color="#000000" + tl:tl_indicator_height="1.5dp" + tl:tl_indicator_width_equal_title="true" + tl:tl_tab_padding="22dp" + tl:tl_tab_space_equal="true" + tl:tl_textBold="SELECT" + tl:tl_textSelectColor="@color/red" + tl:tl_textUnselectColor="@color/gray_light_less" + tl:tl_underline_height="2dp" /> + + + + \ No newline at end of file