From c0f0cd4cb3ed88334d6394918bedddddd65725cc Mon Sep 17 00:00:00 2001 From: JUNGGWAN KIM Date: Tue, 26 Nov 2024 15:35:54 +0900 Subject: [PATCH] ... --- app/build.gradle.kts | 2 + app/src/main/AndroidManifest.xml | 34 +-- .../com/example/accountbook/BaseFragLayout.kt | 28 +++ .../example/accountbook/BehaviorCalendar.kt | 39 ++++ .../example/accountbook/BehaviorCalendar2.kt | 91 ++++++++ .../accountbook/BehaviorCalendarTop.kt | 42 ++++ .../example/accountbook/BehaviorCalendart.kt | 39 ++++ .../com/example/accountbook/FirstFragment.kt | 15 +- .../com/example/accountbook/MainActivity.kt | 141 +++++++++++-- .../accountbook/activity/ActivityCalendar.kt | 27 +-- .../accountbook/adapter/AdapterTable.kt | 2 +- .../accountbook/adapter/SampleAdapter.kt | 37 ++++ .../accountbook/calendar/CalendarAdapter2.kt | 37 ++++ .../accountbook/calendar/CalendarDateView.kt | 12 +- .../accountbook/calendar/CalendarFactory.kt | 6 + .../accountbook/calendar/CalendarView.kt | 9 +- .../calendar/CalendarViewPagerAdapter.kt | 78 +++++++ .../accountbook/calendar2/CalendarFragment.kt | 18 ++ .../accountbook/calendar2/CalendarLayout.kt | 119 +++++++++++ .../accountbook/calendar2/CalendarManager.kt | 44 ++++ .../calendar2/CalendarPagerAdapter.kt | 45 ++++ .../calendar2/example/ActivityCalendarEx.kt | 41 ++++ .../accountbook/fragment/FragmentCalendar.kt | 191 +++++++++-------- .../accountbook/fragment/FragmentTable.kt | 10 +- app/src/main/res/layout/activity_calendar.xml | 145 +++++-------- app/src/main/res/layout/activity_main.xml | 195 +++++++++++++++--- .../res/layout/calendar_activity_example.xml | 64 ++++++ .../res/layout/calendar_pager_example.xml | 34 +++ app/src/main/res/layout/frag1.xml | 10 + app/src/main/res/layout/fragment_base.xml | 21 ++ app/src/main/res/layout/fragment_calendar.xml | 135 ++++++------ app/src/main/res/layout/item_calendar.xml | 79 +++---- app/src/main/res/layout/item_table.xml | 2 +- .../main/res/layout/temp_activity_main.xml | 156 ++++++++++++++ app/src/main/res/values/attr.xml | 4 + 35 files changed, 1591 insertions(+), 361 deletions(-) create mode 100644 app/src/main/java/com/example/accountbook/BaseFragLayout.kt create mode 100644 app/src/main/java/com/example/accountbook/BehaviorCalendar.kt create mode 100644 app/src/main/java/com/example/accountbook/BehaviorCalendar2.kt create mode 100644 app/src/main/java/com/example/accountbook/BehaviorCalendarTop.kt create mode 100644 app/src/main/java/com/example/accountbook/BehaviorCalendart.kt create mode 100644 app/src/main/java/com/example/accountbook/adapter/SampleAdapter.kt create mode 100644 app/src/main/java/com/example/accountbook/calendar/CalendarAdapter2.kt create mode 100644 app/src/main/java/com/example/accountbook/calendar/CalendarViewPagerAdapter.kt create mode 100644 app/src/main/java/com/example/accountbook/calendar2/CalendarFragment.kt create mode 100644 app/src/main/java/com/example/accountbook/calendar2/CalendarLayout.kt create mode 100644 app/src/main/java/com/example/accountbook/calendar2/CalendarManager.kt create mode 100644 app/src/main/java/com/example/accountbook/calendar2/CalendarPagerAdapter.kt create mode 100644 app/src/main/java/com/example/accountbook/calendar2/example/ActivityCalendarEx.kt create mode 100644 app/src/main/res/layout/calendar_activity_example.xml create mode 100644 app/src/main/res/layout/calendar_pager_example.xml create mode 100644 app/src/main/res/layout/frag1.xml create mode 100644 app/src/main/res/layout/fragment_base.xml create mode 100644 app/src/main/res/layout/temp_activity_main.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4df02b2..a406e56 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -49,4 +49,6 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) + // 추가 + implementation("androidx.viewpager2:viewpager2:1.1.0") } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 55d27ca..c0e2bea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,26 +18,34 @@ android:theme="@style/Theme.AccountBook"> - + - + android:theme="@style/Base.Theme.AccountBook"> - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/BaseFragLayout.kt b/app/src/main/java/com/example/accountbook/BaseFragLayout.kt new file mode 100644 index 0000000..ac9fb55 --- /dev/null +++ b/app/src/main/java/com/example/accountbook/BaseFragLayout.kt @@ -0,0 +1,28 @@ +package com.example.accountbook + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout + +class BaseFragLayout : ConstraintLayout { + constructor(context: Context) : super(context) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( + context, + attrs, + defStyleAttr + ) + + constructor( + context: Context, + attrs: AttributeSet?, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attrs, defStyleAttr, defStyleRes){ + findViewById(R.id.child)?.let{ + it.visibility= View.VISIBLE + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/BehaviorCalendar.kt b/app/src/main/java/com/example/accountbook/BehaviorCalendar.kt new file mode 100644 index 0000000..c4b9afa --- /dev/null +++ b/app/src/main/java/com/example/accountbook/BehaviorCalendar.kt @@ -0,0 +1,39 @@ +package com.example.accountbook + +import android.content.Context +import android.util.AttributeSet +import android.util.Log +import android.view.View +import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.recyclerview.widget.RecyclerView +import com.example.accountbook.calendar.CalendarDateView +import com.example.accountbook.calendar.CalendarView +import com.google.android.material.appbar.AppBarLayout +import com.google.android.material.floatingactionbutton.FloatingActionButton + +class BehaviorCalendar(context: Context?, attrs: AttributeSet?) : CoordinatorLayout.Behavior(context, attrs) { + override fun onDependentViewChanged( + parent: CoordinatorLayout, + child: CalendarDateView, + dependency: View + ): Boolean { + // parent: CoordinatorLayout + // child: 이벤트를 받아 변경될 뷰 + // dependency: 의존하고 있는 다른 뷰? + child.y = 0f + Log.d("", "$child") + Log.d("BehaviorCalendar", "$dependency") + child.bottom = dependency.top - 50 + return false + } + + override fun layoutDependsOn( + parent: CoordinatorLayout, + child: CalendarDateView, + dependency: View + ): Boolean { + Log.d("BehaviorCalendar", "layoutDependsOn $dependency") + return dependency.id == R.id.list_table + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/BehaviorCalendar2.kt b/app/src/main/java/com/example/accountbook/BehaviorCalendar2.kt new file mode 100644 index 0000000..295162d --- /dev/null +++ b/app/src/main/java/com/example/accountbook/BehaviorCalendar2.kt @@ -0,0 +1,91 @@ +package com.example.accountbook + +import android.content.Context +import android.util.AttributeSet +import android.util.Log +import android.view.View +import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.core.view.ViewCompat +import androidx.recyclerview.widget.RecyclerView +import com.example.accountbook.calendar.CalendarDateView +import com.example.accountbook.calendar.CalendarView +import com.google.android.material.appbar.AppBarLayout +import com.google.android.material.floatingactionbutton.FloatingActionButton + +class BehaviorCalendar2(context: Context?, attrs: AttributeSet?) : CoordinatorLayout.Behavior(context, attrs) { + override fun layoutDependsOn( + parent: CoordinatorLayout, + child: View, + dependency: View + ): Boolean { + if ((child.tag as? View) != null && (child.tag as View).id == R.id.test2) { + + } else { + if(child.id == R.id.test) child.tag = child.findViewById(R.id.test2) + } + return if (child.tag != null) { + Log.d("BehaviorCalendar777", "layoutDependsOn $child") + true + } else { + false + } + } + + override fun onDependentViewChanged( + parent: CoordinatorLayout, + child: View, + dependency: View + ): Boolean { + // parent: CoordinatorLayout + // child: 이벤트를 받아 변경될 뷰 + // dependency: 의존하고 있는 다른 뷰? + Log.d("BehaviorCalendar333", "child: $child") + Log.d("BehaviorCalendar333", "depend: $dependency") + return true + } + + override fun onDependentViewRemoved( + parent: CoordinatorLayout, + child: View, + dependency: View + ) { + super.onDependentViewRemoved(parent, child, dependency) + Log.d("BehaviorCalendar444", "$child") + Log.d("BehaviorCalendar444", "$dependency") + } + + override fun onStartNestedScroll( + coordinatorLayout: CoordinatorLayout, + child: View, + directTargetChild: View, + target: View, + axes: Int, + type: Int + ): Boolean { + Log.d("BehaviorCalendar555", "SCROLL_AXIS_VERTICAL") + return axes == ViewCompat.SCROLL_AXIS_VERTICAL + } + + var dyDirectionSum = 0 + override fun onNestedPreScroll( + coordinatorLayout: CoordinatorLayout, + child: View, + target: View, + dx: Int, + dy: Int, + consumed: IntArray, + type: Int + ) { + (child.tag as? View)?.let { + it.y += 2 + Log.d("BehaviorCalendar999", "onNestedPreScroll") + } +// if ((dy > 0 && dyDirectionSum < 0) || (dy < 0 && dyDirectionSum > 0)) { +// } +// if (dy > 10) { +// child.y = 90f +// } else { +// child.y = 0f +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/BehaviorCalendarTop.kt b/app/src/main/java/com/example/accountbook/BehaviorCalendarTop.kt new file mode 100644 index 0000000..84123f1 --- /dev/null +++ b/app/src/main/java/com/example/accountbook/BehaviorCalendarTop.kt @@ -0,0 +1,42 @@ +package com.example.accountbook + +import android.content.Context +import android.util.AttributeSet +import android.util.DisplayMetrics +import android.util.Log +import android.view.View +import android.widget.TableLayout +import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.recyclerview.widget.RecyclerView +import com.example.accountbook.calendar.CalendarDateView +import com.example.accountbook.calendar.CalendarView +import com.google.android.material.appbar.AppBarLayout +import com.google.android.material.floatingactionbutton.FloatingActionButton + +class BehaviorCalendarTop(context: Context?, attrs: AttributeSet?) : CoordinatorLayout.Behavior(context, attrs) { + override fun onDependentViewChanged( + parent: CoordinatorLayout, + child: TableLayout, + dependency: View + ): Boolean { + // parent: CoordinatorLayout + // child: 이벤트를 받아 변경될 뷰 + // dependency: 의존하고 있는 다른 뷰? + val height = 30 * (parent.resources.displayMetrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT) + Log.d("", "$child") + Log.d("BehaviorCalendarTop", "onDependentViewChanged $dependency") + child.top = dependency.top - height + child.bottom = dependency.top + return false + } + + override fun layoutDependsOn( + parent: CoordinatorLayout, + child: TableLayout, + dependency: View + ): Boolean { + Log.d("BehaviorCalendar", "layoutDependsOn $dependency") + return dependency.id == R.id.list_table + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/BehaviorCalendart.kt b/app/src/main/java/com/example/accountbook/BehaviorCalendart.kt new file mode 100644 index 0000000..90dade6 --- /dev/null +++ b/app/src/main/java/com/example/accountbook/BehaviorCalendart.kt @@ -0,0 +1,39 @@ +package com.example.accountbook + +import android.content.Context +import android.util.AttributeSet +import android.util.Log +import android.view.View +import android.widget.ImageView +import androidx.annotation.NonNull +import androidx.coordinatorlayout.widget.CoordinatorLayout +import com.example.accountbook.calendar.CalendarDateView +import com.google.android.material.appbar.AppBarLayout +import com.google.android.material.floatingactionbutton.FloatingActionButton + +class BehaviorCalendart(context: Context?, attrs: AttributeSet?) : CoordinatorLayout.Behavior(context, attrs) { + override fun onDependentViewChanged( + parent: CoordinatorLayout, + child: FloatingActionButton, + dependency: View + ): Boolean { + // parent: CoordinatorLayout + // child: 이벤트를 받아 변경될 뷰 + // dependency: 의존하고 있는 다른 뷰? + child.y = 0f + + Log.d("", "$child") + Log.d("BehaviorCalendar", "$dependency") + return false + } + + override fun layoutDependsOn( + parent: CoordinatorLayout, + child: FloatingActionButton, + dependency: View + ): Boolean { + Log.d("BehaviorCalendar", "layoutDependsOn $dependency") + return dependency is AppBarLayout + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/FirstFragment.kt b/app/src/main/java/com/example/accountbook/FirstFragment.kt index 7e3f24e..f311f21 100644 --- a/app/src/main/java/com/example/accountbook/FirstFragment.kt +++ b/app/src/main/java/com/example/accountbook/FirstFragment.kt @@ -1,29 +1,35 @@ package com.example.accountbook +import android.os.Build import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.annotation.RequiresApi import androidx.navigation.fragment.findNavController +import androidx.recyclerview.widget.RecyclerView +import androidx.viewbinding.ViewBinding +import com.example.accountbook.calendar.CalendarAdapter2 +import com.example.accountbook.calendar.CalendarBean +import com.example.accountbook.calendar.CalendarFactory +import com.example.accountbook.calendar.CalendarUtil import com.example.accountbook.databinding.FragmentFirstBinding +import java.util.Date /** * A simple [Fragment] subclass as the default destination in the navigation. */ -class FirstFragment : Fragment() { +class FirstFragment(layoutId: Int): Fragment(layoutId) { private var _binding: FragmentFirstBinding? = null - // This property is only valid between onCreateView and - // onDestroyView. private val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { - _binding = FragmentFirstBinding.inflate(inflater, container, false) return binding.root @@ -31,7 +37,6 @@ class FirstFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - // binding.buttonFirst.setOnClickListener { // findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment) // } diff --git a/app/src/main/java/com/example/accountbook/MainActivity.kt b/app/src/main/java/com/example/accountbook/MainActivity.kt index d179de7..6f1ed6a 100644 --- a/app/src/main/java/com/example/accountbook/MainActivity.kt +++ b/app/src/main/java/com/example/accountbook/MainActivity.kt @@ -1,7 +1,10 @@ package com.example.accountbook import android.content.Intent +import android.graphics.Color import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater import com.google.android.material.snackbar.Snackbar import androidx.appcompat.app.AppCompatActivity import androidx.navigation.findNavController @@ -10,35 +13,110 @@ import androidx.navigation.ui.navigateUp import androidx.navigation.ui.setupActionBarWithNavController import android.view.Menu import android.view.MenuItem +import android.view.View +import android.view.ViewGroup +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import com.example.accountbook.activity.ActivityCalendar +import com.example.accountbook.activity.ActivityWriter +import com.example.accountbook.adapter.AdapterTable +import com.example.accountbook.adapter.SampleAdapter +import com.example.accountbook.calendar.CalendarAdapter +import com.example.accountbook.calendar.CalendarBean +import com.example.accountbook.calendar.CalendarViewFragmentAdapter +import com.example.accountbook.calendar.CalendarViewPagerAdapter +import com.example.accountbook.calendar2.example.ActivityCalendarEx import com.example.accountbook.databinding.ActivityMainBinding +import com.example.accountbook.databinding.FragmentCalendarBinding +import com.example.accountbook.databinding.ItemCalendarBinding +import com.example.accountbook.databinding.TempActivityMainBinding +import com.example.accountbook.fragment.FragCalI1 +import com.example.accountbook.fragment.FragmentCalendar -class MainActivity : AppCompatActivity() { +class MainActivity: AppCompatActivity() { private lateinit var appBarConfiguration: AppBarConfiguration private lateinit var binding: ActivityMainBinding + private var adapterCalendar: CalendarAdapter? = null + lateinit var bindItem: ItemCalendarBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivityMainBinding.inflate(layoutInflater) - setContentView(binding.root) + binding = ActivityMainBinding.inflate(layoutInflater) // 뷰 init + setContentView(binding.root) // activity에 뷰 연결하기 +// setSupportActionBar(binding.toolbar) // activity actionbar 연결하기 - setSupportActionBar(binding.toolbar) +// binding2 = TempActivityMainBinding.inflate(layoutInflater) // 뷰 init +// setContentView(binding2.root) // activity에 뷰 연결하기 +// setSupportActionBar(binding2.toolbar) // activity actionbar 연결하기 - val navController = findNavController(R.id.nav_host_fragment_content_main) - appBarConfiguration = AppBarConfiguration(navController.graph) - setupActionBarWithNavController(navController, appBarConfiguration) +// // NavHostFragment로 NavController 가져오기 +// val navController = findNavController(R.id.nav_host_fragment_content_main) +// // 최상위 뷰에 뒤로가기 버튼 숨기기 +// appBarConfiguration = AppBarConfiguration(navController.graph) +// // NavController와 ActionBar를 통합 +// // 뒤로가기 버튼이 생기고 제목이 업데이트 된다. +// setupActionBarWithNavController(navController, appBarConfiguration) +// +// +// binding.fab.setOnClickListener { view -> +// Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) +// .setAction("Action", null) +// .setAnchorView(R.id.fab).show() +// } - binding.fab.setOnClickListener { view -> - Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) - .setAction("Action", null) - .setAnchorView(R.id.fab).show() - } - startActivity(Intent(applicationContext, ActivityCalendar::class.java)) +// binding.listTable.adapter = SampleAdapter().apply { notifySample() } +// binding.listTable.addOnScrollListener( +// object : RecyclerView.OnScrollListener() { +// override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { +// super.onScrolled(recyclerView, dx, dy) +// val layoutManager = recyclerView.layoutManager as LinearLayoutManager +// val layoutParms = binding.calendar.layoutParams +// if (layoutManager.findFirstVisibleItemPosition() == 0) { +// Log.d("listTable", "it' on the 1st position.") +// // 뷰 높이 +// layoutParms?.height = 300 +// // 달력의 열 +// // binding.calendarDateView.changeRow(1) +// } else { +// // 뷰 높이 +// layoutParms?.height = 800 +// // 달력의 열 +// // binding.calendarDateView.changeRow(6) +// } +// binding.calendar.layoutParams = layoutParms +// } +// } +// ) + + // view pager의 레이아웃에 calendarview를 담을 recyclerview가 필요한지 알기 어렵다 + // view pager의 레이아웃도 binding이 필요하다. viewHolder가 두번 있어야한다. + // 따라서 view pager 레이아웃에 쓸 데이터도 필요할 수 도 있다. +// val fcb = FragmentCalendarBinding.inflate(layoutInflater, binding.root, false) +// val icb = ItemCalendarBinding.inflate(layoutInflater) +// +// bindItem = ItemCalendarBinding.inflate(layoutInflater, binding.root, false) +// binding.pager.adapter = object : CalendarViewFragmentAdapter(this){ +// override fun getFragment(): FragmentCalendar { +// return FragCalI1(R.layout.fragment_calendar, bindItem.root) +// } +// } } + override fun onStart() { + super.onStart() + startActivity(Intent(this, ActivityCalendarEx::class.java)) + } + + override fun onResume() { + super.onResume() + } + + override fun onCreateOptionsMenu(menu: Menu): Boolean { // Inflate the menu; this adds items to the action bar if it is present. menuInflater.inflate(R.menu.menu_main, menu) @@ -60,4 +138,41 @@ class MainActivity : AppCompatActivity() { return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp() } + +// private fun initCalendar() { +// Log.i("FragmentCalendar","initView") +// adapterCalendar = object: CalendarAdapter { +// override fun getView( +// convertView: View?, +// parentView: ViewGroup?, +// bean: CalendarBean? +// ): View { +// Log.i("FragmentCalendar","getView") +// +// var bindItem : ItemCalendarBinding? = null +// if (convertView == null) { +// bindItem = ItemCalendarBinding.inflate(LayoutInflater.from(parentView?.context)) +// } else { +// bindItem = ItemCalendarBinding.bind(convertView) +// } +// bindItem.day.apply { +// this.text = bean?.day.toString() +// if (bean?.monthFlag != 0) { +// this.setTextColor(Color.WHITE) +// } else { +// this.setTextColor(Color.BLACK) +// } +// } +// +//// bindItem.root.setOnLongClickListener{ it -> +//// startActivity(Intent(context, ActivityWriter::class.java)) +//// return@setOnLongClickListener true +//// } +// return convertView ?: bindItem.root +// } +// +//// override fun hasChildView() = binding.calendarDateView.views.size > 0 +// } +// binding.calendarDateView.setAdapter(adapterCalendar) +// } } \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/activity/ActivityCalendar.kt b/app/src/main/java/com/example/accountbook/activity/ActivityCalendar.kt index efa49d5..e62bf4c 100644 --- a/app/src/main/java/com/example/accountbook/activity/ActivityCalendar.kt +++ b/app/src/main/java/com/example/accountbook/activity/ActivityCalendar.kt @@ -21,7 +21,7 @@ import com.example.accountbook.fragment.FragmentTable class ActivityCalendar: AppCompatActivity(){ private lateinit var bind: ActivityCalendarBinding - val fragmentCalendar: FragmentCalendar by lazy { FragmentCalendar() } +// val fragmentCalendar: FragmentCalendar by lazy { FragmentCalendar() } val fragmentTable: FragmentTable by lazy { FragmentTable() } override fun onCreate(savedInstanceState: Bundle?) { @@ -30,20 +30,15 @@ class ActivityCalendar: AppCompatActivity(){ bind = ActivityCalendarBinding.inflate(this.layoutInflater) // setting content view setContentView(bind.root) - bind.chkShift.setOnClickListener() { _ -> - // 화면 전환 - supportFragmentManager.beginTransaction() - .replace( - R.id.fragment_box, - if (bind.chkShift.isChecked) fragmentTable else fragmentCalendar - ) - .commit() - } - - supportFragmentManager.beginTransaction() - .replace( - R.id.fragment_box, fragmentCalendar - ) - .commit() +// bind.chkShift.setOnClickListener() { _ -> // 화면 전환 +// supportFragmentManager.beginTransaction().apply { +// if (bind.chkShift.isChecked) { +// show(fragmentTable) +// } else { +// hide(fragmentTable) +// } +// }.commit(); +// } +// supportFragmentManager.beginTransaction().replace(R.id.fragment_box, fragmentCalendar).add(R.id.fragment_box, fragmentTable).hide(fragmentTable).commit() } } \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/adapter/AdapterTable.kt b/app/src/main/java/com/example/accountbook/adapter/AdapterTable.kt index c2a3042..78e6590 100644 --- a/app/src/main/java/com/example/accountbook/adapter/AdapterTable.kt +++ b/app/src/main/java/com/example/accountbook/adapter/AdapterTable.kt @@ -8,7 +8,7 @@ import android.widget.ArrayAdapter import com.example.accountbook.R import com.example.accountbook.databinding.ItemTableBinding -class AdapterTable(context: Context, private val data: Array): +class AdapterTable(context: Context, private val data: List): ArrayAdapter(context, R.layout.item_table, data) { private lateinit var bind:ItemTableBinding diff --git a/app/src/main/java/com/example/accountbook/adapter/SampleAdapter.kt b/app/src/main/java/com/example/accountbook/adapter/SampleAdapter.kt new file mode 100644 index 0000000..c3957ab --- /dev/null +++ b/app/src/main/java/com/example/accountbook/adapter/SampleAdapter.kt @@ -0,0 +1,37 @@ +package com.example.accountbook.adapter + +import android.annotation.SuppressLint +import android.util.Log +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.example.accountbook.R + + +class SampleAdapter : RecyclerView.Adapter() { + + private val items = mutableListOf() + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = SampleViewHolder(parent) + + override fun onBindViewHolder(holder: SampleViewHolder, position: Int) { + Log.d("SampleAdapter", "position: $position") + } + + override fun getItemCount() = items.size.also { + Log.d("SampleAdapter", "items.size: ${items.size}") + } + + fun notifySample() { + items.clear() + (1..60).forEach { + items.add(it) + } + Log.d("SampleAdapter", "items.size: ${items.size}") + notifyDataSetChanged() + } + + class SampleViewHolder(parent: ViewGroup) : RecyclerView.ViewHolder( + LayoutInflater.from(parent.context).inflate(R.layout.item_table, parent, false) + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/calendar/CalendarAdapter2.kt b/app/src/main/java/com/example/accountbook/calendar/CalendarAdapter2.kt new file mode 100644 index 0000000..33d7c91 --- /dev/null +++ b/app/src/main/java/com/example/accountbook/calendar/CalendarAdapter2.kt @@ -0,0 +1,37 @@ +package com.example.accountbook.calendar + +import android.util.Log +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.ViewHolder + + +abstract class CalendarAdapter2(private val layout: View, private val listBeans: List): RecyclerView.Adapter() { + // input + abstract fun bindViewHolder(holder: CalendarAdapter2.ViewHolderCalendar2, bean: CalendarBean) + override fun onAttachedToRecyclerView(recyclerView: RecyclerView) { + super.onAttachedToRecyclerView(recyclerView) + Log.d("CalendarAdapter2", "onAttachedToRecyclerView recyclerview: $recyclerView") + } + + // view holder + class ViewHolderCalendar2(view: View) : RecyclerView.ViewHolder(view) + + + // extension RecyclerView + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CalendarAdapter2.ViewHolderCalendar2 { + Log.d("CalendarAdapter2", "onCreateViewHolder") + return ViewHolderCalendar2(this.layout) + } + + override fun getItemCount(): Int { + Log.d("CalendarAdapter2", "getItemCount size: ${listBeans.size}") + return listBeans.size + } + + override fun onBindViewHolder(holder: CalendarAdapter2.ViewHolderCalendar2, position: Int) { + Log.d("CalendarAdapter2", "onBindViewHolder") + bindViewHolder(holder, listBeans[position]) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/calendar/CalendarDateView.kt b/app/src/main/java/com/example/accountbook/calendar/CalendarDateView.kt index 670caa4..3b6ca3a 100644 --- a/app/src/main/java/com/example/accountbook/calendar/CalendarDateView.kt +++ b/app/src/main/java/com/example/accountbook/calendar/CalendarDateView.kt @@ -19,9 +19,9 @@ class CalendarDateView(context: Context, attrs: AttributeSet?): private var mCaledarLayoutChangeListener: CalendarTopViewChangeListener? = null private var onItemClickListener: CalendarView.OnItemClickListener? = null private val cache: LinkedList = LinkedList() - private val MAXCOUNT = 6 private var row = 6 private var mAdapter: CalendarAdapter? = null + private var mAdapterPager: PagerAdapter? =null override var itemHeight = 0 private set @@ -40,7 +40,6 @@ class CalendarDateView(context: Context, attrs: AttributeSet?): val a = context.obtainStyledAttributes(attrs, R.styleable.CalendarDateView) row = a.getInteger(R.styleable.CalendarDateView_cbd_calendar_row, 6) a.recycle() - } override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { @@ -60,7 +59,7 @@ class CalendarDateView(context: Context, attrs: AttributeSet?): private fun initialize() { val dateArr: IntArray = CalendarUtil.getYMD(Date()) - setAdapter(object : PagerAdapter() { + mAdapterPager = object: PagerAdapter() { override fun getCount(): Int { // Log.i(this@CalendarDateView::class.java.simpleName, "container >>> setAdapter getCount") return Int.MAX_VALUE @@ -99,7 +98,8 @@ class CalendarDateView(context: Context, attrs: AttributeSet?): cache.addLast(`object` as CalendarView) views.remove(position) } - }) + } + setAdapter(mAdapterPager) addOnPageChangeListener(object: SimpleOnPageChangeListener() { override fun onPageSelected(position: Int) { super.onPageSelected(position) @@ -135,4 +135,8 @@ class CalendarDateView(context: Context, attrs: AttributeSet?): override fun setCalendarTopViewChangeListener(listener: CalendarTopViewChangeListener?) { mCaledarLayoutChangeListener = listener } + + fun changeRow(row: Int) { + this.row = row + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/calendar/CalendarFactory.kt b/app/src/main/java/com/example/accountbook/calendar/CalendarFactory.kt index ac15d4c..c9d063b 100644 --- a/app/src/main/java/com/example/accountbook/calendar/CalendarFactory.kt +++ b/app/src/main/java/com/example/accountbook/calendar/CalendarFactory.kt @@ -42,7 +42,13 @@ object CalendarFactory { list.add(bean) } Log.e("TIME CHECK" , "fun getMonthOfDayList END") + +// val resultList: MutableList = ArrayList() +// for (i in 0 until 7) { +// resultList.add(list[i]) +// } return list +// return resultList } fun getCalendarBean(year: Int, month: Int, day: Int): CalendarBean { diff --git a/app/src/main/java/com/example/accountbook/calendar/CalendarView.kt b/app/src/main/java/com/example/accountbook/calendar/CalendarView.kt index 3fc58c7..b513586 100644 --- a/app/src/main/java/com/example/accountbook/calendar/CalendarView.kt +++ b/app/src/main/java/com/example/accountbook/calendar/CalendarView.kt @@ -43,7 +43,14 @@ class CalendarView : ViewGroup { } fun setData(data: List?, isToday: Boolean) { - this.data = data + var li: MutableList = ArrayList() + for (i in 0 until 7) { + if (data != null) { + li.add(data[i]) + } + } + this.data = li +// this.data = data this.isToday = isToday setItem() requestLayout() diff --git a/app/src/main/java/com/example/accountbook/calendar/CalendarViewPagerAdapter.kt b/app/src/main/java/com/example/accountbook/calendar/CalendarViewPagerAdapter.kt new file mode 100644 index 0000000..31de050 --- /dev/null +++ b/app/src/main/java/com/example/accountbook/calendar/CalendarViewPagerAdapter.kt @@ -0,0 +1,78 @@ +package com.example.accountbook.calendar + +import android.content.Context +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager2.adapter.FragmentStateAdapter +import com.example.accountbook.MainActivity +import com.example.accountbook.R +import com.example.accountbook.fragment.FragCalI1 +import com.example.accountbook.fragment.FragmentCalendar +import java.util.Date + +//abstract +abstract class CalendarViewFragmentAdapter(activity: AppCompatActivity): FragmentStateAdapter(activity) { + private lateinit var calendarData: List + + + override fun createFragment(position: Int): Fragment { + return getFragment().setCalendarData(this.getCalendarData(position)) + } + + override fun getItemCount(): Int + = Int.MAX_VALUE + + + protected fun getCalendarData(position: Int): List + = CalendarUtil.getYMD(Date()).run { + return CalendarFactory.getMonthOfDayList( + this[0], + this[1] + position - Int.MAX_VALUE / 2 + ) + } + + abstract fun getFragment(): FragmentCalendar +} + +abstract class CalendarViewPagerAdapter (val pageView: View, val calendarView: RecyclerView, val dateItemView: View, val context: Context): RecyclerView.Adapter() { + // member + private val row = 7 + // input + abstract fun bindDateViewHolder(holder: RecyclerView.ViewHolder, bean: CalendarBean) + abstract fun bindCalendarViewHolder(holder: RecyclerView.ViewHolder, listBeans: List) + + + // view Holder + class PageViewHolder(view: View): RecyclerView.ViewHolder(view) + + + // extension RecyclerView Adapter + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder + = PageViewHolder(pageView) + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + // calendar date + val dateArr: IntArray = CalendarUtil.getYMD(Date()) + val data = CalendarFactory.getMonthOfDayList( + dateArr[0], + dateArr[1] + position - Int.MAX_VALUE / 2 + ) + + // etc + bindCalendarViewHolder(holder, data) +// val isToday: Boolean = position == Int.MAX_VALUE / 2 + + calendarView.adapter = object : CalendarAdapter2(dateItemView, data) { + override fun bindViewHolder(holder: CalendarAdapter2.ViewHolderCalendar2, bean: CalendarBean) { + // 날짜 뷰 + bindDateViewHolder(holder, bean) + } + } + calendarView.layoutManager = GridLayoutManager(context, row) + } +} diff --git a/app/src/main/java/com/example/accountbook/calendar2/CalendarFragment.kt b/app/src/main/java/com/example/accountbook/calendar2/CalendarFragment.kt new file mode 100644 index 0000000..92e3905 --- /dev/null +++ b/app/src/main/java/com/example/accountbook/calendar2/CalendarFragment.kt @@ -0,0 +1,18 @@ +package com.example.accountbook.calendar2 + +import android.os.Bundle +import androidx.fragment.app.Fragment +import androidx.viewbinding.ViewBinding + + +// life cycle, calendar data binding +abstract class CalendarFragment: Fragment() { + // member + + + + // Fragment + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/calendar2/CalendarLayout.kt b/app/src/main/java/com/example/accountbook/calendar2/CalendarLayout.kt new file mode 100644 index 0000000..cbeb642 --- /dev/null +++ b/app/src/main/java/com/example/accountbook/calendar2/CalendarLayout.kt @@ -0,0 +1,119 @@ +package com.example.accountbook.calendar2 + +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.util.AttributeSet +import android.util.Log +import android.view.View +import android.view.ViewGroup +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.constraintlayout.widget.ConstraintSet +import androidx.core.view.children +import androidx.core.view.forEach +import androidx.recyclerview.widget.RecyclerView +import androidx.viewpager2.widget.ViewPager2 +import androidx.viewpager2.widget.ViewPager2.Orientation +import com.example.accountbook.R + +interface CalendarLayoutListener { + fun onCreatedViewPager() +} + +class CalendarLayout: ConstraintLayout { + constructor(context: Context) : super(context) { + setAttr(null) + } + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { + setAttr(attrs)} + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( + context, + attrs, + defStyleAttr + ) { + setAttr(attrs)} + constructor( + context: Context, + attrs: AttributeSet?, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attrs, defStyleAttr, defStyleRes) { + setAttr(attrs) + } + + + // member + private var attrs: AttributeSet? = null + private var pagerLayoutId = -1 + var viewPager: ViewPager2? = null + var listener: CalendarLayoutListener? = null + + + // ViewGroup + override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) { + Log.d("CalendarLayout", "onLayout >>>") + super.onLayout(changed, left, top, right, bottom) + this.id = ConstraintLayout.generateViewId() + Log.d("CalendarLayout", "CalendarLayout.id: $this.id") + + if (!isInEditMode) { + // child로 viewPager 이외에는 모두 숨김처리 + Log.d("CalendarLayout", "childCount: $childCount") + this.children.forEach { child -> + Log.d("CalendarLayout", "child: $child") + if (child.id == viewPager?.id) { + return@forEach + } + this.removeView(child) + } + + if (viewPager == null) { + addCalendarPager() + listener?.onCreatedViewPager() + } else { + Log.e("CalendarLayout", "viewPager already exist.") + } + } + + Log.d("CalendarLayout", "onLayout <<<") + } + + + // fun + private fun setAttr(attrs: AttributeSet?) { + this.attrs = attrs +// context.obtainStyledAttributes(attrs, R.styleable.CalendarLayout).run { +// pagerLayoutId = this.getResourceId(R.styleable.CalendarLayout_pager_layout, -1) +// this.recycle() +// } + } + + private fun addCalendarPager() { + // viewPager to add + viewPager = ViewPager2(this.context).apply { + this.id = ViewPager2.generateViewId() + this.setBackgroundColor(Color.parseColor("#cd5c5c")) + this.orientation = ViewPager2.ORIENTATION_HORIZONTAL + } + // do + this.addView( + viewPager, + ConstraintLayout.LayoutParams( + ConstraintLayout.LayoutParams.MATCH_PARENT, + ConstraintLayout.LayoutParams.MATCH_PARENT, + ) + ) + // constraint of viewPager + ConstraintSet().run { + this.clone(this@CalendarLayout) + this.connect( + viewPager!!.id, + ConstraintSet.TOP, + this@CalendarLayout.id, + ConstraintSet.TOP, + 0 + ) + this.applyTo(this@CalendarLayout) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/calendar2/CalendarManager.kt b/app/src/main/java/com/example/accountbook/calendar2/CalendarManager.kt new file mode 100644 index 0000000..dc1908f --- /dev/null +++ b/app/src/main/java/com/example/accountbook/calendar2/CalendarManager.kt @@ -0,0 +1,44 @@ +package com.example.accountbook.calendar2 + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.fragment.app.FragmentManager +import androidx.lifecycle.Lifecycle +import com.example.accountbook.R + +class CalendarManager { + constructor(fragmentActivity: FragmentActivity) { + this.fragmentActivity = fragmentActivity + } + constructor(fragment: Fragment) { + this.fragment = fragment + } + constructor(fragmentManager: FragmentManager, lifecycle: Lifecycle) { + this.fragmentManager = fragmentManager + this.lifecycle = lifecycle + } + + + // member + lateinit var fragmentActivity: FragmentActivity + lateinit var fragment: Fragment + lateinit var fragmentManager: FragmentManager + lateinit var lifecycle: Lifecycle + + + // fun + fun getCalendarAdapter(fragmentActivity: FragmentActivity) { + CalendarPagerAdapter(fragmentActivity) + } + fun getCalendarAdapter(fragment: Fragment) { + CalendarPagerAdapter(fragment) + } + fun getCalendarAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) { + CalendarPagerAdapter(fragmentManager, lifecycle) + } + + +// viewPager?.adapter = CalendarPagerAdapter(this).apply { +// this.layoutId = R.layout.calendar_pager_example +// } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/calendar2/CalendarPagerAdapter.kt b/app/src/main/java/com/example/accountbook/calendar2/CalendarPagerAdapter.kt new file mode 100644 index 0000000..af33ac9 --- /dev/null +++ b/app/src/main/java/com/example/accountbook/calendar2/CalendarPagerAdapter.kt @@ -0,0 +1,45 @@ +package com.example.accountbook.calendar2 + +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.fragment.app.FragmentManager +import androidx.lifecycle.Lifecycle +import androidx.viewpager2.adapter.FragmentStateAdapter +import androidx.viewpager2.adapter.FragmentViewHolder + +class CalendarPagerAdapter : FragmentStateAdapter { + constructor(fragmentActivity: FragmentActivity) : super(fragmentActivity) + constructor(fragment: Fragment) : super(fragment) + constructor(fragmentManager: FragmentManager, lifecycle: Lifecycle) : super( + fragmentManager, + lifecycle + ) + + + // member + var layoutId: Int? = null + + override fun onBindViewHolder( + holder: FragmentViewHolder, + position: Int, + payloads: MutableList + ) { + super.onBindViewHolder(holder, position, payloads) + } + // FragmentStateAdapter + override fun getItemCount(): Int = Int.MAX_VALUE + + override fun createFragment(position: Int): Fragment { + Log.d("CalendarPagerAdapter", "createFragment layoutId: ${layoutId}") + return if (layoutId != null) Fragment(layoutId!!) else Fragment() + } + + fun getTopView(position: Int, inflater: LayoutInflater) : View? = null + fun getBottomView(position: Int, inflater: LayoutInflater) : View? = null + fun drawCalendar(position: Int) = true + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/calendar2/example/ActivityCalendarEx.kt b/app/src/main/java/com/example/accountbook/calendar2/example/ActivityCalendarEx.kt new file mode 100644 index 0000000..40bb59d --- /dev/null +++ b/app/src/main/java/com/example/accountbook/calendar2/example/ActivityCalendarEx.kt @@ -0,0 +1,41 @@ +package com.example.accountbook.calendar2.example + +import android.os.Bundle +import android.util.Log +import androidx.appcompat.app.AppCompatActivity +import com.example.accountbook.R +import com.example.accountbook.calendar2.CalendarLayoutListener +import com.example.accountbook.calendar2.CalendarManager +import com.example.accountbook.calendar2.CalendarPagerAdapter +import com.example.accountbook.databinding.CalendarActivityExampleBinding + +class ActivityCalendarEx: AppCompatActivity() { + // member + private var bind: CalendarActivityExampleBinding? = null + + + // AppCompatActivity + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + bind = CalendarActivityExampleBinding.inflate(this.layoutInflater) + bind?.let { + setContentView(it.root) + it.calendarLayoutEx.listener = object: CalendarLayoutListener { + override fun onCreatedViewPager() { + it.calendarLayoutEx.viewPager?.adapter = CalendarPagerAdapter(this@ActivityCalendarEx).apply { + this.layoutId = R.layout.calendar_pager_example + } + } + } + it.root.setOnClickListener{ + + } + } + + } + + override fun onStart() { + super.onStart() + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/fragment/FragmentCalendar.kt b/app/src/main/java/com/example/accountbook/fragment/FragmentCalendar.kt index 50ead5e..badcb89 100644 --- a/app/src/main/java/com/example/accountbook/fragment/FragmentCalendar.kt +++ b/app/src/main/java/com/example/accountbook/fragment/FragmentCalendar.kt @@ -1,113 +1,132 @@ package com.example.accountbook.fragment import android.content.Context -import android.content.Intent -import android.graphics.Color import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import com.example.accountbook.activity.ActivityWriter -import com.example.accountbook.calendar.CalendarAdapter +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.ViewHolder +import com.example.accountbook.R +import com.example.accountbook.calendar.CalendarAdapter2 import com.example.accountbook.calendar.CalendarBean import com.example.accountbook.databinding.FragmentCalendarBinding import com.example.accountbook.databinding.ItemCalendarBinding -class FragmentCalendar: Fragment() { - private lateinit var bind: FragmentCalendarBinding + +abstract class FragmentCalendar(val layoutId: Int, val dateView: View) : Fragment() { + // member + private val row = 7 + // var layoutId: Int +// private val root: View +// get() = getRoot() +// private var pageData: List? = getPageData() + private val recyclerView: RecyclerView + get() = getCalendarView() +// private val dateView: View +// get() = getDateView() + + private lateinit var calendarData: List + + // page view draw +// abstract fun getLayoutId(): Int +// abstract fun getRoot(): View + + // page view data, nullable +// fun getPageData(): List? { +// return null +// } + + abstract fun bindPageView(): View + + // calendarView draw + abstract fun getCalendarView(): RecyclerView + + // calendarView ItemView draw +// abstract fun getDateView(): View + + // calendarView ItemView data + fun setCalendarData(data :List): FragmentCalendar { + this.calendarData = data + return this + } + + // calendarView ItemView binding + abstract fun bindDateViewHolder(holder: CalendarAdapter2.ViewHolderCalendar2, bean: CalendarBean) + + + // fragment + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - bind = FragmentCalendarBinding.inflate(inflater) - return bind.root - } - - override fun onStart() { - super.onStart() - // init view - if (bind.calendarDateView.adapter == null) { - initView() - } - // init list -// initList() - } - - private fun initView() { - Log.i("FragmentCalendar","initView") - - bind.calendarDateView.setAdapter(object: CalendarAdapter { - override fun getView( - convertView: View?, - parentView: ViewGroup?, - bean: CalendarBean? - ): View { - Log.i("FragmentCalendar","getView") - - var bindItem : ItemCalendarBinding? = null - if (convertView == null) { - bindItem = ItemCalendarBinding.inflate(LayoutInflater.from(parentView?.context)) - } else { - bindItem = ItemCalendarBinding.bind(convertView) - } - bindItem.day.apply { - this.text = bean?.day.toString() - if (bean?.monthFlag != 0) { - this.setTextColor(Color.WHITE) - } else { - this.setTextColor(Color.BLACK) - } - } - - bindItem.root.setOnLongClickListener{ it -> - startActivity(Intent(context, ActivityWriter::class.java)) - return@setOnLongClickListener true - } - return convertView ?: bindItem.root - } - - override fun hasChildView() = bind.calendarDateView.views.size > 0 - }) - } - - override fun onAttach(context: Context) { - super.onAttach(context) + Log.d("FragmentCalendar","NOT Working on f1") + return inflater.inflate(layoutId, container, false) } override fun onResume() { super.onResume() + bindPageView() + recyclerView.layoutManager = GridLayoutManager(context, row) + val ma = object: CalendarAdapter2(dateView, calendarData) { + override fun bindViewHolder(holder: CalendarAdapter2.ViewHolderCalendar2, bean: CalendarBean) { + bindDateViewHolder(holder, bean) + } + } + recyclerView.adapter = ma + Log.d("FragmentCalendar", "onResume recyclerview: ${recyclerView}") + } +} + +class FragCalI1(layoutId: Int, dateView: View) : FragmentCalendar(layoutId, dateView) { + private lateinit var bind: FragmentCalendarBinding + private lateinit var bindItem: ItemCalendarBinding + +// override fun getLayoutId(): Int { +// return R.layout.fragment_calendar +// } + +// override fun getRoot(): View { +// TODO("Not yet implemented") +// } + + override fun bindPageView(): View { + Log.d("FragCalI1", "bindPageView") + return bind.root } -// private fun initList() { -// bind.list.setAdapter(object : BaseAdapter() { -// override fun getCount(): Int { -// Log.i("bindList" , "getCount ") -// return 100 -// } -// -// override fun getItem(position: Int) = null -// -// override fun getItemId(position: Int): Long = 0 -// -// override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { -// Log.i("bindList" , "getView ${position}") -// var mConvertView: View? = convertView -// if (mConvertView == null) { -// mConvertView = LayoutInflater.from(this@ActivityCalendar).inflate(android.R.layout.simple_list_item_1, null) -// } -// -// (mConvertView as TextView).apply { -// this.text = "item" + position -// this.setBackgroundColor(Color.RED) -// } -// -// return mConvertView -// } -// -// }) + override fun getCalendarView(): RecyclerView { + Log.d("FragCalI1", "getCalendarView recyclerview: ${bind.calendarDateView}") + return bind.calendarDateView + } + +// override fun getDateView(): View { +// return bindItem.root // } + + override fun bindDateViewHolder(holder: CalendarAdapter2.ViewHolderCalendar2, bean: CalendarBean) { + Log.d("FragCalI1", "bindDateViewHolder, bean: ${bean}") + } + + override fun onAttach(context: Context) { + super.onAttach(context) + Log.d("onAttach" , "onAttach") + } + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + bind = FragmentCalendarBinding.inflate(inflater,container, false) + bindItem = ItemCalendarBinding.inflate(inflater, container, false) + return super.onCreateView(inflater,container,savedInstanceState) + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/fragment/FragmentTable.kt b/app/src/main/java/com/example/accountbook/fragment/FragmentTable.kt index 0772f82..e866138 100644 --- a/app/src/main/java/com/example/accountbook/fragment/FragmentTable.kt +++ b/app/src/main/java/com/example/accountbook/fragment/FragmentTable.kt @@ -4,26 +4,28 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.ArrayAdapter import androidx.fragment.app.Fragment -import com.example.accountbook.R import com.example.accountbook.adapter.AdapterTable import com.example.accountbook.databinding.FragmentTableBinding class FragmentTable: Fragment() { private lateinit var bind: FragmentTableBinding - private var li: Array = arrayOf("0", "1") + private var li: ArrayList = arrayListOf() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { + + for (i in 0..<50) { + li.add(i.toString()) + } // view bind = FragmentTableBinding.inflate(inflater) // data setData() - bind.listTable.adapter = AdapterTable(inflater.context, li) + bind.listTable.adapter = AdapterTable(inflater.context, li.toList()) return bind.root } diff --git a/app/src/main/res/layout/activity_calendar.xml b/app/src/main/res/layout/activity_calendar.xml index 46c5f4c..5265382 100644 --- a/app/src/main/res/layout/activity_calendar.xml +++ b/app/src/main/res/layout/activity_calendar.xml @@ -8,94 +8,63 @@ android:layout_height="match_parent" android:orientation="vertical"> - - - - - - - - - - -