Browse Source

fix: 📄使用CalendarView组件替代原生组件

dev-calendar-view
niushuai233 1 year ago
parent
commit
6e7cbba7db
  1. 77
      app/src/main/java/cc/niushuai/didicheck/ui/main/home/HomeFragment.java
  2. 18
      app/src/main/res/layout/fragment_home.xml
  3. 24
      app/src/main/res/layout/item_list.xml

77
app/src/main/java/cc/niushuai/didicheck/ui/main/home/HomeFragment.java

@ -6,7 +6,6 @@ import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.CalendarView;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -19,6 +18,9 @@ import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.haibin.calendarview.Calendar;
import com.haibin.calendarview.CalendarView;
import org.reactivestreams.Subscription; import org.reactivestreams.Subscription;
import java.util.Collections; import java.util.Collections;
@ -62,29 +64,42 @@ public class HomeFragment extends Fragment {
fragmentHomeBinding = FragmentHomeBinding.inflate(inflater, container, false); fragmentHomeBinding = FragmentHomeBinding.inflate(inflater, container, false);
ConstraintLayout rootLayout = fragmentHomeBinding.getRoot(); ConstraintLayout rootLayout = fragmentHomeBinding.getRoot();
TextView homeTitleTextView = fragmentHomeBinding.homeTitleTextView; initTextView();
homeTitleTextView.setGravity(Gravity.CENTER);
homeViewModel.getTitle().observe(getViewLifecycleOwner(), value -> homeTitleTextView.setText(value));
homeTitleTextView.setText("未完待续...");
homeViewModel.setSelectDate(new Date());
CalendarView homeMainCalendar = fragmentHomeBinding.homeMainCalendar;
homeMainCalendar.setDate(DateUtil.date().getTime());
homeMainCalendar.setOnDateChangeListener((calendarView, year, month, day) -> {
long date = calendarView.getDate();
String format = StrUtil.format("{}-{}-{}", year, month + 1, day);
Log.d("calendar_change", "tag = " + DateUtil.date(date).toDateStr() + ", ==>" + format);
// 缓存选择的日期 initCalendarView();
homeViewModel.setSelectDate(DateUtil.parseDate(format));
// 刷新数据 initVerticalCalendarView();
refreshDataListByDate(format);
});
// 默认查一次今天的数据 // 默认查一次今天的数据
refreshDataListByDate(DateUtil.formatDate(new Date())); refreshDataListByDate(DateUtil.formatDate(new Date()));
initRecyleView();
return rootLayout;
}
private void initVerticalCalendarView() {
CalendarView homeMainCalendar = fragmentHomeBinding.homeMainCalendar;
// homeMainCalendar.setSchemeDate();
homeMainCalendar.setOnCalendarSelectListener(new CalendarView.OnCalendarSelectListener() {
@Override
public void onCalendarOutOfRange(Calendar calendar) {
Log.d("onCalendarOutOfRange", "" + calendar.getTimeInMillis());
}
@Override
public void onCalendarSelect(Calendar calendar, boolean isClick) {
Log.d("onCalendarSelect", isClick + "---" + calendar.getTimeInMillis());
String dateStr = StrUtil.format("{}-{}-{}", calendar.getYear(), calendar.getMonth(), calendar.getDay());
homeViewModel.setSelectDate(DateUtil.parseDate(dateStr));
// 刷新数据
refreshDataListByDate(dateStr);
}
});
}
private void initRecyleView() {
RecyclerView homeDataZoneRecyclerView = fragmentHomeBinding.homeDataZoneRecyclerView; RecyclerView homeDataZoneRecyclerView = fragmentHomeBinding.homeDataZoneRecyclerView;
homeDataZoneRecyclerView.addItemDecoration(new DividerItemDecoration(this.getActivity(), DividerItemDecoration.VERTICAL)); homeDataZoneRecyclerView.addItemDecoration(new DividerItemDecoration(this.getActivity(), DividerItemDecoration.VERTICAL));
DefaultItemAnimator itemAnimator = new DefaultItemAnimator(); DefaultItemAnimator itemAnimator = new DefaultItemAnimator();
@ -96,8 +111,32 @@ public class HomeFragment extends Fragment {
fragmentHomeBinding.homeDataZoneRecyclerView.setAdapter(homeRecycleViewAdapter); fragmentHomeBinding.homeDataZoneRecyclerView.setAdapter(homeRecycleViewAdapter);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
fragmentHomeBinding.homeDataZoneRecyclerView.setLayoutManager(layoutManager); fragmentHomeBinding.homeDataZoneRecyclerView.setLayoutManager(layoutManager);
}
return rootLayout; private void initCalendarView() {
// CalendarView homeMainCalendar = fragmentHomeBinding.homeMainCalendar;
// homeMainCalendar.setDate(DateUtil.date().getTime());
// homeMainCalendar.setOnDateChangeListener((calendarView, year, month, day) -> {
// long date = calendarView.getDate();
// String format = StrUtil.format("{}-{}-{}", year, month + 1, day);
// Log.d("calendar_change", "tag = " + DateUtil.date(date).toDateStr() + ", ==>" + format);
//
// // 缓存选择的日期
// homeViewModel.setSelectDate(DateUtil.parseDate(format));
//
// // 刷新数据
// refreshDataListByDate(format);
// });
}
private void initTextView() {
TextView homeTitleTextView = fragmentHomeBinding.homeTitleTextView;
homeTitleTextView.setGravity(Gravity.CENTER);
homeViewModel.getTitle().observe(getViewLifecycleOwner(), value -> homeTitleTextView.setText(value));
homeTitleTextView.setText("未完待续...");
homeViewModel.getSelectDate().observe(getViewLifecycleOwner(), value -> homeTitleTextView.setText(DateUtil.formatDate(value)));
homeViewModel.setSelectDate(new Date());
} }
@Override @Override

18
app/src/main/res/layout/fragment_home.xml

@ -15,8 +15,9 @@
app:layout_constraintHeight_percent="0.05" app:layout_constraintHeight_percent="0.05"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<!--
<!--日历组件view--> &lt;!&ndash;日历组件view&ndash;&gt;
<CalendarView <CalendarView
android:id="@+id/home_main_calendar" android:id="@+id/home_main_calendar"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -25,6 +26,18 @@
app:layout_constraintLeft_toLeftOf="@id/home_title_textView" app:layout_constraintLeft_toLeftOf="@id/home_title_textView"
app:layout_constraintTop_toBottomOf="@id/home_title_textView" /> app:layout_constraintTop_toBottomOf="@id/home_title_textView" />
-->
<com.haibin.calendarview.CalendarView
android:id="@+id/home_main_calendar"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintHeight_percent="0.45"
app:layout_constraintLeft_toLeftOf="@id/home_title_textView"
app:layout_constraintTop_toBottomOf="@id/home_title_textView">
</com.haibin.calendarview.CalendarView>
<!--数据展示view--> <!--数据展示view-->
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/home_dataZone_recyclerView" android:id="@+id/home_dataZone_recyclerView"
@ -32,7 +45,6 @@
android:layout_height="0dp" android:layout_height="0dp"
app:layout_constraintHeight_percent="0.5" app:layout_constraintHeight_percent="0.5"
app:layout_constraintLeft_toLeftOf="@id/home_main_calendar" app:layout_constraintLeft_toLeftOf="@id/home_main_calendar"
app:layout_constraintTop_toBottomOf="@+id/home_main_calendar" app:layout_constraintTop_toBottomOf="@+id/home_main_calendar" />
/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

24
app/src/main/res/layout/item_list.xml

@ -4,22 +4,32 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/item_list_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/fab_icon_swimming" />
<TextView <TextView
android:id="@+id/item_list_title_textView" android:id="@+id/item_list_title_textView"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="29dp" style="@style/TextAppearance.Material3.BodyLarge"
android:layout_marginTop="33dp" android:layout_marginStart="10dp"
app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="30dp"
app:layout_constraintTop_toTopOf="parent" /> android:textSize="20sp"
app:layout_constraintLeft_toRightOf="@+id/item_list_icon"
app:layout_constraintStart_toStartOf="@+id/item_list_icon" />
<TextView <TextView
android:id="@+id/item_list_content_textView" android:id="@+id/item_list_content_textView"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="4dp" android:layout_marginStart="10dp"
android:layout_marginTop="18dp" android:layout_marginTop="10dp"
app:layout_constraintStart_toStartOf="@id/item_list_title_textView" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/item_list_title_textView" /> app:layout_constraintTop_toBottomOf="@id/item_list_title_textView" />

Loading…
Cancel
Save