Browse Source

feat: 存在问题的视图

master
niushuai233 1 year ago
parent
commit
3940ae91b5
  1. 2
      app/build.gradle
  2. 49
      app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java
  3. 4
      app/src/main/java/cc/niushuai/dididone/ui/base/BaseFragment.java
  4. 2
      app/src/main/java/cc/niushuai/dididone/ui/calendar/CalendarFragment.java
  5. 5
      app/src/main/java/cc/niushuai/dididone/ui/statistic/MyPagerAdapter.java
  6. 19
      app/src/main/java/cc/niushuai/dididone/ui/statistic/StatisticFragment.java
  7. 46
      app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/BaseChartFragment.java
  8. 48
      app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/ListFragment.java
  9. 19
      app/src/main/res/layout/fragment_stat_list.xml
  10. 11
      app/src/main/res/layout/fragment_statistic.xml

2
app/build.gradle

@ -67,6 +67,8 @@ dependencies { @@ -67,6 +67,8 @@ dependencies {
// calendar
// implementation 'com.github.angcyo:CalendarView:3.7.1.37'
implementation 'com.necer.ncalendar:ncalendar:5.0.2'
//
implementation 'com.github.loper7:DateTimePicker:0.6.3'
//
implementation "com.github.skydoves:colorpickerview:2.3.0"
// fab

49
app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java

@ -7,9 +7,12 @@ import android.widget.LinearLayout; @@ -7,9 +7,12 @@ import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.loper7.date_time_picker.DateTimeConfig;
import com.loper7.date_time_picker.dialog.CardDatePickerDialog;
import com.mikepenz.iconics.IconicsDrawable;
import com.mikepenz.iconics.view.IconicsImageView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -28,6 +31,8 @@ import cn.hutool.core.date.DateUtil; @@ -28,6 +31,8 @@ import cn.hutool.core.date.DateUtil;
import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
/**
* 业务全局对象
@ -152,4 +157,48 @@ public class BizGlobal { @@ -152,4 +157,48 @@ public class BizGlobal {
textView.setGravity(gravity);
return textView;
}
public static void buildCardDatePickerDialog(Context context, String title,
Long defaultDate, Long minDate, Long maxDate, boolean showTime,
String confirmTxt, Function1<Long, Unit> unitFunction) {
CardDatePickerDialog.Builder builder = new CardDatePickerDialog.Builder(context);
builder.setTitle(title)
.setBackGroundModel(CardDatePickerDialog.STACK)
.showBackNow(false)
.setWrapSelectorWheel(false)
.showDateLabel(true)
.showFocusDateInfo(true)
.setOnChoose(confirmTxt, unitFunction);
if (null != defaultDate) {
builder.setDefaultTime(defaultDate);
}
List<Integer> displayTypeList = new ArrayList<>(6);
displayTypeList.add(DateTimeConfig.YEAR);
displayTypeList.add(DateTimeConfig.MONTH);
displayTypeList.add(DateTimeConfig.DAY);
if (showTime) {
displayTypeList.add(DateTimeConfig.HOUR);
displayTypeList.add(DateTimeConfig.MIN);
displayTypeList.add(DateTimeConfig.SECOND);
}
builder.setDisplayType(displayTypeList);
if (null != minDate) {
builder.setMinTime(minDate);
}
if (null != maxDate) {
builder.setMaxTime(maxDate);
}
builder.build().show();
}
public static Long getTextViewDate(TextView textView) {
return DateUtil.parseDate(textView.getText().toString()).getTime();
}
}

4
app/src/main/java/cc/niushuai/dididone/ui/base/BaseFragment.java

@ -9,6 +9,8 @@ import androidx.annotation.NonNull; @@ -9,6 +9,8 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import cc.niushuai.dididone.util.XLog;
public abstract class BaseFragment extends Fragment implements InitAndSetListener {
@ -26,6 +28,8 @@ public abstract class BaseFragment extends Fragment implements InitAndSetListene @@ -26,6 +28,8 @@ public abstract class BaseFragment extends Fragment implements InitAndSetListene
init();
setListeners();
XLog.d("{} onViewCreated", getId());
}
}

2
app/src/main/java/cc/niushuai/dididone/ui/calendar/CalendarFragment.java

@ -85,6 +85,8 @@ public class CalendarFragment extends Fragment { @@ -85,6 +85,8 @@ public class CalendarFragment extends Fragment {
private void init() {
initPointList();
binding.miui10Calendar.setInitializeDate(DateUtil.date().toDateStr());
// 构建弹出框内容
// fetchNewestActionButtonData();

5
app/src/main/java/cc/niushuai/dididone/ui/statistic/MyPagerAdapter.java

@ -1,15 +1,18 @@ @@ -1,15 +1,18 @@
package cc.niushuai.dididone.ui.statistic;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.fragment.app.FragmentStatePagerAdapter;
import java.util.List;
import cc.niushuai.dididone.ui.statistic.charts.BaseChartFragment;
public class MyPagerAdapter extends FragmentPagerAdapter {
public class MyPagerAdapter extends FragmentStatePagerAdapter {
List<BaseChartFragment> fragmentList;
//构造方法,方便之后赋值调用

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

@ -6,11 +6,11 @@ import android.view.View; @@ -6,11 +6,11 @@ import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
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;
@ -27,6 +27,7 @@ import cc.niushuai.dididone.ui.statistic.charts.WeekFragment; @@ -27,6 +27,7 @@ import cc.niushuai.dididone.ui.statistic.charts.WeekFragment;
public class StatisticFragment extends Fragment {
private FragmentStatisticBinding binding;
List<BaseChartFragment> fragments = new ArrayList<>(4);;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
@ -36,23 +37,31 @@ public class StatisticFragment extends Fragment { @@ -36,23 +37,31 @@ public class StatisticFragment extends Fragment {
binding = FragmentStatisticBinding.inflate(inflater, container, false);
View root = binding.getRoot();
ViewPager viewPager = binding.statViewpager;
SlidingTabLayout tabLayout = binding.statTabLayout;
// SlidingTabLayout tabLayout = binding.statTabLayout;
TabLayout tabLayout = binding.statTabLayout;
// 初始化所有的fragment
List<BaseChartFragment> fragments = new ArrayList<>();
if (fragments.isEmpty()) {
fragments.add(new ListFragment());
fragments.add(new WeekFragment());
fragments.add(new MonthFragment());
fragments.add(new OtherFragment());
}
viewPager.setOffscreenPageLimit(1);
MyPagerAdapter adapter = new MyPagerAdapter(getActivity().getSupportFragmentManager(), fragments);
//绑定adapter
viewPager.setAdapter(adapter);
//绑定viewPager
List<String> titles = fragments.stream().map(BaseChartFragment::getTitle).collect(Collectors.toList());
tabLayout.setViewPager(viewPager, titles.toArray(new String[0]));
tabLayout.setupWithViewPager(viewPager);
//设置标题
for (int i = 0; i < titles.size(); i++) {
tabLayout.getTabAt(i).setText(titles.get(i));
}
return root;
}

46
app/src/main/java/cc/niushuai/dididone/ui/statistic/charts/BaseChartFragment.java

@ -1,18 +1,19 @@ @@ -1,18 +1,19 @@
package cc.niushuai.dididone.ui.statistic.charts;
import java.util.Iterator;
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 java.util.List;
import cc.niushuai.dididone.biz.BizGlobal;
import cc.niushuai.dididone.biz.entity.Project;
import cc.niushuai.dididone.biz.entity.Record;
import cc.niushuai.dididone.biz.roomx.DBManager;
import cc.niushuai.dididone.ui.base.BaseFragment;
import cc.niushuai.dididone.util.XLog;
import cn.hutool.core.date.DateUtil;
import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
public class BaseChartFragment extends BaseFragment {
@ -36,4 +37,35 @@ public class BaseChartFragment extends BaseFragment { @@ -36,4 +37,35 @@ public class BaseChartFragment extends BaseFragment {
return DateUtil.parseDate(date).getTime();
}
@Override
public void onStart() {
super.onStart();
XLog.d("{} onStart", getTitle());
}
@Override
public void onDestroy() {
super.onDestroy();
XLog.d("{} onDestroy", getTitle());
}
@Override
public void onDestroyView() {
super.onDestroyView();
XLog.d("{} onDestroyView", getTitle());
}
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
XLog.d("{} onViewStateRestored", getTitle());
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
setRetainInstance(true);
super.onCreate(savedInstanceState);
XLog.d("{} onCreate", getTitle());
}
}

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

@ -1,5 +1,7 @@ @@ -1,5 +1,7 @@
package cc.niushuai.dididone.ui.statistic.charts;
import static cc.niushuai.dididone.biz.BizGlobal.getTextViewDate;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@ -25,8 +27,9 @@ import cc.niushuai.dididone.databinding.FragmentStatListBinding; @@ -25,8 +27,9 @@ import cc.niushuai.dididone.databinding.FragmentStatListBinding;
import cc.niushuai.dididone.util.XLog;
import cn.hutool.core.date.DateUtil;
import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
public class ListFragment extends BaseChartFragment {
@ -39,9 +42,10 @@ public class ListFragment extends BaseChartFragment { @@ -39,9 +42,10 @@ public class ListFragment extends BaseChartFragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
XLog.d("{} onCreateView", getTitle());
View view = inflater.inflate(R.layout.fragment_stat_list, container, false);
binding = FragmentStatListBinding.bind(view);
return view;
return binding.getRoot();
}
@Override
@ -84,6 +88,8 @@ public class ListFragment extends BaseChartFragment { @@ -84,6 +88,8 @@ public class ListFragment extends BaseChartFragment {
dateStr2mills(startDate.toString()),
dateStr2mills(endDate.toString()));
listFlowable.subscribeOn(Schedulers.io()).subscribe(recordList -> {
XLog.d("recordList: {}", recordList.size());
recordList.forEach(item -> XLog.d("{} at {}", item.getName(), DateUtil.date(item.getCheckDate()).toDateStr()));
@ -93,14 +99,17 @@ public class ListFragment extends BaseChartFragment { @@ -93,14 +99,17 @@ public class ListFragment extends BaseChartFragment {
}
private void onRecordDataList(List<Record> recordList) {
getActivity().runOnUiThread(() -> {
binding.statTotalMsg.setText("总计: " + recordList.size() + "条记录");
binding.statListCheckInList.removeAllViews();
});
// 更新视图
for (int i = recordList.size() - 1; i >= 0; i--) {
// 查出来的数据是倒叙的
Record record = recordList.get(i);
getActivity().runOnUiThread(() -> {
binding.statListCheckInList.removeAllViews();
add2Top(BizGlobal.CACHE_PROJECT.get(record.getProjectId()), record);
});
getActivity().runOnUiThread(() -> add2Top(BizGlobal.CACHE_PROJECT.get(record.getProjectId()), record));
}
}
@ -116,11 +125,38 @@ public class ListFragment extends BaseChartFragment { @@ -116,11 +125,38 @@ public class ListFragment extends BaseChartFragment {
public void setListeners() {
binding.statListStartDate.setOnClickListener(v -> {
Function1<Long, Unit> unitFunction = millisecond -> {
String dateStr = DateUtil.date(millisecond).toDateStr();
XLog.d("select date = {}", dateStr);
binding.statListStartDate.setText(dateStr);
onConditionChange(binding.statListSpinnerProject.getSelectedItemPosition(), binding.statListStartDate.getText(), binding.statListEndDate.getText());
return null;
};
BizGlobal.buildCardDatePickerDialog(getContext(), "选择起始日期", getTextViewDate(binding.statListStartDate), null, getTextViewDate(binding.statListEndDate),
false, "确定", unitFunction);
});
binding.statListEndDate.setOnClickListener(v -> {
Function1<Long, Unit> unitFunction = millisecond -> {
String dateStr = DateUtil.date(millisecond).toDateStr();
XLog.d("select date = {}", dateStr);
binding.statListEndDate.setText(dateStr);
onConditionChange(binding.statListSpinnerProject.getSelectedItemPosition(), binding.statListStartDate.getText(), binding.statListEndDate.getText());
return null;
};
BizGlobal.buildCardDatePickerDialog(getContext(), "选择结束日期", getTextViewDate(binding.statListEndDate), getTextViewDate(binding.statListStartDate), null,
false, "确定", unitFunction);
});
}
}

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

@ -1,19 +1,17 @@ @@ -1,19 +1,17 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
android:orientation="vertical">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/gray_light_more"
>
android:background="@color/gray_light_more">
<Spinner
android:id="@+id/stat_list_spinner_project"
android:layout_width="0dp"
style="@style/Widget.AppCompat.Button.Borderless.Colored"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:layout_weight="0.3" />
@ -46,6 +44,15 @@ @@ -46,6 +44,15 @@
</LinearLayout>
<TextView
android:id="@+id/stat_total_msg"
android:layout_width="match_parent"
android:layout_height="15dp"
android:layout_gravity="center"
android:background="@color/gray_light_more"
android:gravity="center_vertical|right"
android:text="总计: 0条记录" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -55,7 +62,7 @@ @@ -55,7 +62,7 @@
android:id="@+id/stat_list_check_in_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
android:orientation="vertical" />
</androidx.core.widget.NestedScrollView>

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

@ -4,10 +4,15 @@ @@ -4,10 +4,15 @@
android:layout_height="match_parent"
android:orientation="vertical">
<!-- stat_tab_layout -->
<com.flyco.tablayout.SlidingTabLayout
<com.google.android.material.tabs.TabLayout
android:id="@+id/stat_tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<!-- stat_tab_layout -->
<!--<com.flyco.tablayout.SlidingTabLayout
android:id="@+id/stat_tab_layout2"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#EEEEEE"
tl:tl_divider_color="#1A000000"
@ -21,7 +26,7 @@ @@ -21,7 +26,7 @@
tl:tl_textBold="SELECT"
tl:tl_textSelectColor="@color/red"
tl:tl_textUnselectColor="@color/gray_light_less"
tl:tl_underline_height="2dp" />
tl:tl_underline_height="2dp" />-->
<androidx.viewpager.widget.ViewPager
android:id="@+id/stat_viewpager"

Loading…
Cancel
Save