Browse Source

feat: 🐕 列表视图搞定

master
niushuai233 1 year ago
parent
commit
fcf1c412c8
  1. 2
      app/src/main/java/cc/niushuai/dididone/biz/dao/RecordDao.java
  2. 137
      app/src/main/java/cc/niushuai/dididone/ui/statistic/StatisticFragment.java
  3. 17
      app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/ListFragment.java
  4. 1
      app/src/main/res/layout/fragment_stat_list.xml
  5. 22
      app/src/main/res/layout/fragment_statistic.xml
  6. 4
      app/src/main/res/values/strings.xml

2
app/src/main/java/cc/niushuai/dididone/biz/dao/RecordDao.java

@ -45,6 +45,8 @@ public interface RecordDao {
@Query("select check_date from t_record where deleted = 0 and check_date >= :startTime and check_date <= :endTime order by check_date asc") @Query("select check_date from t_record where deleted = 0 and check_date >= :startTime and check_date <= :endTime order by check_date asc")
Flowable<List<Record>> queryPointByDate(long startTime, long endTime); Flowable<List<Record>> queryPointByDate(long startTime, long endTime);
@Query("select * from t_record where deleted = 0 and check_date >= :startDate and check_date <= :endDate order by check_date desc")
Flowable<List<Record>> queryByCheckDate(long startDate, long endDate);
@Query("select * from t_record where deleted = 0 and project_id = :projectId and check_date >= :startDate and check_date <= :endDate order by check_date desc") @Query("select * from t_record where deleted = 0 and project_id = :projectId and check_date >= :startDate and check_date <= :endDate order by check_date desc")
Flowable<List<Record>> queryByProjectAndDate(Long projectId, long startDate, long endDate); Flowable<List<Record>> queryByProjectAndDate(Long projectId, long startDate, long endDate);
} }

137
app/src/main/java/cc/niushuai/dididone/ui/statistic/StatisticFragment.java

@ -12,17 +12,20 @@ import androidx.lifecycle.ViewModelProvider;
import cc.niushuai.dididone.R; import cc.niushuai.dididone.R;
import cc.niushuai.dididone.databinding.FragmentStatisticBinding; import cc.niushuai.dididone.databinding.FragmentStatisticBinding;
import cc.niushuai.dididone.ui.base.BaseFragment; import cc.niushuai.dididone.ui.base.BaseFragment;
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;
import cc.niushuai.dididone.util.XLog; import cc.niushuai.dididone.util.XLog;
public class StatisticFragment extends BaseFragment implements View.OnClickListener { public class StatisticFragment extends BaseFragment implements View.OnClickListener {
private FragmentStatisticBinding binding; private FragmentStatisticBinding binding;
//三个fragment private ListFragment listFragment;
private MyFragment f1; private WeekFragment weekFragment;
private MyFragment f2; private MonthFragment monthFragment;
private MyFragment f3; private OtherFragment otherFragment;
private MyFragment f4;
public View onCreateView(@NonNull LayoutInflater inflater, public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) { ViewGroup container, Bundle savedInstanceState) {
@ -38,15 +41,15 @@ public class StatisticFragment extends BaseFragment implements View.OnClickListe
@Override @Override
public void init() { public void init() {
initFragment1(); initListFragment();
} }
@Override @Override
public void setListeners() { public void setListeners() {
binding.btn1.setOnClickListener(this); binding.statButtonList.setOnClickListener(this);
binding.btn2.setOnClickListener(this); binding.statButtonWeek.setOnClickListener(this);
binding.btn3.setOnClickListener(this); binding.statButtonMonth.setOnClickListener(this);
binding.btn4.setOnClickListener(this); binding.statButtonOther.setOnClickListener(this);
} }
@Override @Override
@ -55,114 +58,96 @@ public class StatisticFragment extends BaseFragment implements View.OnClickListe
binding = null; binding = null;
} }
//显示第一个fragment /**
private void initFragment1() { * list维度
//开启事务,fragment的控制是由事务来实现的 */
private void initListFragment() {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction(); FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
//第一种方式(add),初始化fragment并添加到事务中,如果为null就new一个 if (listFragment == null) {
if (f1 == null) { listFragment = new ListFragment();
f1 = new MyFragment("消息"); transaction.add(R.id.stat_main_frame_layout, listFragment);
transaction.add(R.id.main_frame_layout, f1);
} }
//隐藏所有fragment
hideFragment(transaction); hideFragment(transaction);
//显示需要显示的fragment transaction.show(listFragment);
transaction.show(f1);
//第二种方式(replace),初始化fragment
// if(f1 == null){
// f1 = new MyFragment("消息");
// }
// transaction.replace(R.id.main_frame_layout, f1);
//提交事务
transaction.commit(); transaction.commit();
} }
//显示第二个fragment /**
private void initFragment2() { * 周维度
*/
private void initWeekFragment() {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction(); FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
if (f2 == null) { if (weekFragment == null) {
f2 = new MyFragment("联系人"); weekFragment = new WeekFragment();
transaction.add(R.id.main_frame_layout, f2); transaction.add(R.id.stat_main_frame_layout, weekFragment);
} }
hideFragment(transaction); hideFragment(transaction);
transaction.show(f2); transaction.show(weekFragment);
// if(f2 == null) {
// f2 = new MyFragment("联系人");
// }
// transaction.replace(R.id.main_frame_layout, f2);
transaction.commit(); transaction.commit();
} }
//显示第三个fragment /**
private void initFragment3() { * 月维度视图
*/
private void initMonthFragment() {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction(); FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
if (f3 == null) { if (monthFragment == null) {
f3 = new MyFragment("动态"); monthFragment = new MonthFragment();
transaction.add(R.id.main_frame_layout, f3); transaction.add(R.id.stat_main_frame_layout, monthFragment);
} }
hideFragment(transaction); hideFragment(transaction);
transaction.show(f3); transaction.show(monthFragment);
// if(f3 == null) {
// f3 = new MyFragment("动态");
// }
// transaction.replace(R.id.main_frame_layout, f3);
transaction.commit(); transaction.commit();
} }
//显示第三个fragment /**
private void initFragment4() { * 其他
*/
private void initOtherFragment() {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction(); FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
if (f4 == null) { if (otherFragment == null) {
f4 = new MyFragment("其他"); otherFragment = new OtherFragment();
transaction.add(R.id.main_frame_layout, f4); transaction.add(R.id.stat_main_frame_layout, otherFragment);
} }
hideFragment(transaction); hideFragment(transaction);
transaction.show(f4); transaction.show(otherFragment);
// if(f3 == null) {
// f3 = new MyFragment("动态");
// }
// transaction.replace(R.id.main_frame_layout, f3);
transaction.commit(); transaction.commit();
} }
//隐藏所有的fragment //隐藏所有的fragment
private void hideFragment(FragmentTransaction transaction) { private void hideFragment(FragmentTransaction transaction) {
if (f1 != null) { if (listFragment != null) {
transaction.hide(f1); transaction.hide(listFragment);
} }
if (f2 != null) { if (weekFragment != null) {
transaction.hide(f2); transaction.hide(weekFragment);
} }
if (f3 != null) { if (monthFragment != null) {
transaction.hide(f3); transaction.hide(monthFragment);
} }
if (f4 != null) { if (otherFragment != null) {
transaction.hide(f4); transaction.hide(otherFragment);
} }
} }
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (v == binding.btn1) { if (v == binding.statButtonList) {
initFragment1(); initListFragment();
} else if (v == binding.btn2) { } else if (v == binding.statButtonWeek) {
initFragment2(); initWeekFragment();
} else if (v == binding.btn3) { } else if (v == binding.statButtonMonth) {
initFragment3(); initMonthFragment();
} else if (v == binding.btn4) { } else if (v == binding.statButtonOther) {
initFragment4(); initOtherFragment();
} }
} }
} }

17
app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/ListFragment.java

@ -66,6 +66,7 @@ public class ListFragment extends BaseChartFragment {
private void initSpinner(Spinner spinner) { private void initSpinner(Spinner spinner) {
List<String> items = BizGlobal.getAvailableProjectList().stream().map(item -> item.getName()).collect(Collectors.toList()); List<String> items = BizGlobal.getAvailableProjectList().stream().map(item -> item.getName()).collect(Collectors.toList());
items.add(0, "选择打卡项");
spinner.setAdapter(new ArrayAdapter<>(getContext(), androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, items)); spinner.setAdapter(new ArrayAdapter<>(getContext(), androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, items));
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@ -83,11 +84,17 @@ public class ListFragment extends BaseChartFragment {
} }
private void onConditionChange(int position, CharSequence startDate, CharSequence endDate) { private void onConditionChange(int position, CharSequence startDate, CharSequence endDate) {
Flowable<List<Record>> listFlowable = DBManager.INSTANCE.recordDao().queryByProjectAndDate( position--;
BizGlobal.getAvailableProjectList().get(position).getId(), Flowable<List<Record>> listFlowable;
dateStr2mills(startDate.toString()), if (position < 0) {
dateStr2mills(endDate.toString())); // position小于0 表示选中第一个 即未选择打卡项 查询所有打卡项
listFlowable = DBManager.INSTANCE.recordDao().queryByCheckDate(dateStr2mills(startDate.toString()), dateStr2mills(endDate.toString()));
} else {
listFlowable = DBManager.INSTANCE.recordDao().queryByProjectAndDate(
BizGlobal.getAvailableProjectList().get(position).getId(),
dateStr2mills(startDate.toString()),
dateStr2mills(endDate.toString()));
}
listFlowable.subscribeOn(Schedulers.io()).subscribe(recordList -> { listFlowable.subscribeOn(Schedulers.io()).subscribe(recordList -> {

1
app/src/main/res/layout/fragment_stat_list.xml

@ -14,6 +14,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginLeft="20dp" android:layout_marginLeft="20dp"
android:autofillHints="name"
android:layout_weight="0.3" /> android:layout_weight="0.3" />
<TextView <TextView

22
app/src/main/res/layout/fragment_statistic.xml

@ -7,46 +7,46 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="48dp"> android:layout_height="50dp">
<Button <Button
android:id="@+id/btn1" android:id="@+id/stat_button_list"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="#ffffff" android:background="#ffffff"
android:text="消息" /> android:text="@string/stat_header_list" />
<Button <Button
android:id="@+id/btn2" android:id="@+id/stat_button_week"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="#ffffff" android:background="#ffffff"
android:text="联系人" /> android:text="@string/stat_header_week" />
<Button <Button
android:id="@+id/btn3" android:id="@+id/stat_button_month"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="#ffffff" android:background="#ffffff"
android:text="动态" /> android:text="@string/stat_header_month" />
<Button <Button
android:id="@+id/btn4" android:id="@+id/stat_button_other"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="#ffffff" android:background="#ffffff"
android:text="其他" /> android:text="@string/stat_header_other" />
</LinearLayout> </LinearLayout>
<FrameLayout <FrameLayout
android:id="@+id/main_frame_layout" android:id="@+id/stat_main_frame_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1" android:layout_weight="1"
android:background="#dddddd"></FrameLayout> android:background="@color/gray_light_less" />
</LinearLayout> </LinearLayout>

4
app/src/main/res/values/strings.xml

@ -31,5 +31,9 @@
<string name="np_button_confirm">保存</string> <string name="np_button_confirm">保存</string>
<string name="cp_color_confirm">选择该颜色</string> <string name="cp_color_confirm">选择该颜色</string>
<string name="cancel">取消</string> <string name="cancel">取消</string>
<string name="stat_header_list">列表视图</string>
<string name="stat_header_week">周视图</string>
<string name="stat_header_month">月视图</string>
<string name="stat_header_other">其他</string>
</resources> </resources>
Loading…
Cancel
Save