Skip to content

Commit cf6370e

Browse files
committed
[테스트] 샘플 앱에서 같은 데이터를 바라보는 상황에서 Player를 remove했을 때 발생하는 ConcurrentModificationException 이슈 처리
1 parent d37811f commit cf6370e

5 files changed

Lines changed: 17 additions & 13 deletions

File tree

app/src/main/java/com/yeonkyu/holdableswipehandler/ui/list_adapter_recyclerview/ListAdapterRecyclerViewFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class ListAdapterRecyclerViewFragment : Fragment() {
2020
private lateinit var binding : FragmentRecyclerviewBinding
2121
private lateinit var adapter : MyListAdapter
2222

23-
private lateinit var playerList : ArrayList<Player>
23+
private lateinit var playerList : MutableList<Player>
2424

2525
override fun onCreateView(
2626
inflater: LayoutInflater,
@@ -30,7 +30,7 @@ class ListAdapterRecyclerViewFragment : Fragment() {
3030
binding = DataBindingUtil.inflate(inflater,R.layout.fragment_recyclerview, container, false)
3131
binding.lifecycleOwner = this
3232

33-
playerList = DataLoader.initPlayer(requireContext())
33+
playerList = DataLoader.initPlayer(requireContext()).toMutableList()
3434

3535
setUpRecyclerView()
3636
setUpHoldableSwipeHandler()

app/src/main/java/com/yeonkyu/holdableswipehandler/ui/normal_recyclerview/NormalAdapter.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ import com.yeonkyu.holdableswipehandler.databinding.ItemPlayerBinding
1111

1212
class NormalAdapter : RecyclerView.Adapter<PlayerViewHolder>() {
1313

14-
private lateinit var playerList : ArrayList<Player>
14+
private lateinit var playerList : MutableList<Player>
1515

16-
fun setPlayer(list : ArrayList<Player>) {
17-
playerList = list
16+
fun setPlayer(list : List<Player>) {
17+
playerList = list.toMutableList()
1818
}
1919

2020
fun removePlayer(position : Int) {

app/src/main/java/com/yeonkyu/holdableswipehandler/ui/normal_recyclerview/NormalRecyclerViewFragment.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,16 @@ import androidx.recyclerview.widget.DividerItemDecoration
1313
import androidx.recyclerview.widget.ItemTouchHelper
1414
import com.yeonkyu.HoldableSwipeHelper.deprecated.HoldableSwipeHelper
1515
import com.yeonkyu.HoldableSwipeHelper.SwipeButtonAction
16+
import com.yeonkyu.holdableswipehandler.data.Player
1617
import com.yeonkyu.holdableswipehandler.databinding.FragmentRecyclerviewBinding
1718

1819
class NormalRecyclerViewFragment : Fragment() {
1920

2021
private lateinit var binding : FragmentRecyclerviewBinding
2122
private lateinit var adapter : NormalAdapter
2223

24+
private lateinit var playerList : List<Player>
25+
2326
override fun onCreateView(
2427
inflater: LayoutInflater,
2528
container: ViewGroup?,
@@ -28,6 +31,8 @@ class NormalRecyclerViewFragment : Fragment() {
2831
binding = DataBindingUtil.inflate(inflater,R.layout.fragment_recyclerview, container, false)
2932
binding.lifecycleOwner = this
3033

34+
playerList = DataLoader.initPlayer(requireContext()).toList()
35+
3136
setUpRecyclerView()
3237
setUpHoldableSwipeHandler()
3338

@@ -38,9 +43,8 @@ class NormalRecyclerViewFragment : Fragment() {
3843
val swipeHelper = HoldableSwipeHelper(requireContext(), object : SwipeButtonAction {
3944
override fun onClickFirstButton(absoluteAdapterPosition: Int) {
4045
adapter.removePlayer(absoluteAdapterPosition)
41-
//adapter.notifyDataSetChanged()
4246
adapter.notifyItemRemoved(absoluteAdapterPosition)
43-
adapter.notifyItemRangeChanged(absoluteAdapterPosition,adapter.itemCount)
47+
adapter.notifyItemRangeChanged(absoluteAdapterPosition, adapter.itemCount)
4448
}
4549
})
4650

@@ -56,7 +60,7 @@ class NormalRecyclerViewFragment : Fragment() {
5660
private fun setUpRecyclerView() {
5761
binding.recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
5862
adapter = NormalAdapter().apply {
59-
setPlayer(DataLoader.initPlayer(requireContext()))
63+
setPlayer(playerList)
6064
}
6165
binding.recyclerView.adapter = adapter
6266
}

app/src/main/res/values-night/themes.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<resources xmlns:tools="http://schemas.android.com/tools">
22
<!-- Base application theme. -->
3-
<style name="Theme.HoldableSwipeHandler" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
3+
<style name="Theme.HoldableSwipeHandler" parent="Theme.AppCompat.Light.NoActionBar">
44
<!-- Primary brand color. -->
5-
<item name="colorPrimary">@color/purple_200</item>
5+
<item name="colorPrimary">@color/purple_500</item>
66
<item name="colorPrimaryVariant">@color/purple_700</item>
7-
<item name="colorOnPrimary">@color/black</item>
7+
<item name="colorOnPrimary">@color/white</item>
88
<!-- Secondary brand color. -->
99
<item name="colorSecondary">@color/teal_200</item>
10-
<item name="colorSecondaryVariant">@color/teal_200</item>
10+
<item name="colorSecondaryVariant">@color/teal_700</item>
1111
<item name="colorOnSecondary">@color/black</item>
1212
<!-- Status bar color. -->
1313
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>

app/src/main/res/values/themes.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<resources xmlns:tools="http://schemas.android.com/tools">
22
<!-- Base application theme. -->
3-
<style name="Theme.HoldableSwipeHandler" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
3+
<style name="Theme.HoldableSwipeHandler" parent="Theme.AppCompat.Light.NoActionBar">
44
<!-- Primary brand color. -->
55
<item name="colorPrimary">@color/purple_500</item>
66
<item name="colorPrimaryVariant">@color/purple_700</item>

0 commit comments

Comments
 (0)