๐ŸŒ„ Sandamso ํ”„๋กœ์ ํŠธ - 8

kkominยท2023๋…„ 11์›” 7์ผ
0

Android Studio

๋ชฉ๋ก ๋ณด๊ธฐ
44/44
post-thumbnail

์ปค๋ฎค๋‹ˆํ‹ฐ ํŽ˜์ด์ง€์—์„œ ์กฐ๊ฑด์— ๋”ฐ๋ฅธ ๊ธ€ ์ •๋ ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด๋ณด์ž. ๋ฉ”๋‰ด ์•„์ดํ…œ์„ ์ด์šฉํ•ด์„œ ์ •๋ ฌ ์กฐ๊ฑด์„ ์„ ํƒํ•˜๋ฉด ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฒŒ์‹œ๊ธ€์ด ์ •๋ ฌ๋œ๋‹ค.


๋ฉ”๋‰ด๋ฐ” ์ƒ์„ฑ

๋ฉ”๋‰ด ์•„์ดํ…œ ์ƒ์„ฑ

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/menu_option_latest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:title="์ตœ์‹ ์ˆœ" />
    <item
        android:id="@+id/menu_option_deadline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:title="์ธ๊ธฐ์ˆœ" />
    <item
        android:id="@+id/menu_option_deadline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:title="๋งˆ๊ฐ์ผ์ˆœ" />
    <item
        android:id="@+id/menu_option_mine"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:title="๋‚ด ๊ธ€ ์ˆœ" />
</menu>


๋ฉ”๋‰ด ์•„์ดํ…œ์„ ๋ˆŒ๋ €์„ ๋•Œ

๋ฉ”๋‰ด์˜ ์•„์ดํ…œ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋ˆŒ๋ฆฐ๊ฑด์ง€ ์•Œ๊ธฐ ์œ„ํ•œ ๋กœ๊ทธ๋กœ ํ™•์ธํ•ด์ค€๋‹ค.

binding.communityImageOption.setOnClickListener {
            Log.d("Options", "๋ฒ„ํŠผ ๋ˆŒ๋ €๋ƒ?")
            val menu = PopupMenu(context, it)
            menu.menuInflater.inflate(R.menu.sort_option, menu.menu)
            menu.setOnMenuItemClickListener {
                when(it.itemId) {
                    R.id.menu_option_latest -> {
                    	Log.d("menu", "์ตœ์‹ ์ˆœ")
                        true
                    }
                    R.id.menu_option_like -> {
                    	Log.d("menu", "์ธ๊ธฐ์ˆœ")
                        true
                    }
                    R.id.menu_option_deadline -> {
                    	Log.d("menu", "๋งˆ๊ฐ์ผ์ˆœ")
                        true
                    }
                    R.id.menu_option_mine -> {
                    	Log.d("menu", "๋‚ด ๊ธ€ ์ˆœ")
                        true
                    }
                    else -> {
                        false
                    }
                }
            }
        }

์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌ

๊ฒŒ์‹œ๋ฌผ์„ ์—…๋กœ๋“œํ•œ ๋‚ ์งœ๊ฐ€ ์ตœ์‹ ์ธ ๊ฒŒ์‹œ๋ฌผ์„ ์ƒ๋‹จ์— ํ‘œ์‹œ๋˜๋„๋ก ์˜ฌ๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด sortBy ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 // ์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌ
    private fun sortPostLatest() {
        Log.d("menu", "์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌ")
        communityList.sortBy { it.date }
        communityPageAdapter.notifyDataSetChanged()
    }

๋งˆ๊ฐ์ผ ์ˆœ์œผ๋กœ ์ •๋ ฌ

์ฒ˜์Œ ์ƒ๊ฐํ•œ ์ฝ”๋“œ

// ๋งˆ๊ฐ์ผ์ˆœ์œผ๋กœ ์ •๋ ฌ
    @SuppressLint("NotifyDataSetChanged")
    private fun sortPostDeadline() {
        Log.d("menu", "๋งˆ๊ฐ์ผ ์ˆœ์œผ๋กœ ์ •๋ ฌ")
        communityList.sortBy { communityPageAdapter.calculateDday(it) }
        communityPageAdapter.addItem(communityList)

        communityPageAdapter.notifyDataSetChanged()
    }

๊ฒŒ์‹œ๋ฌผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” PostModel์˜ ์ฝ”๋“œ์—์„œ deadline์„ ๊ทธ๋ƒฅ ๊ฐ€์ ธ์˜ค๊ณ  ์ด๋กœ ์ •๋ ฌ์„ ํ•ด์ฃผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ? ํ–ˆ์ง€๋งŒ... ์‹คํŒจ!


์ฝ”๋“œ ์ˆ˜์ •ํ•˜๊ธฐ (1)

deadlinedate๋Š” ์–ด๋–ป๊ฒŒ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ๋ฅผ ์ฐ์–ด๋ดค๋‹ค.

์ƒ๊ฐํ–ˆ๋˜ ๋กœ๊ทธ ๊ฒฐ๊ณผ๋Š” deadlinedate=20231117 ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋˜ ๊ฑฐ์˜€๋Š”๋ฐ...!!!!


๊ทธ๋ž˜๋„ ๋กœ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ๋งˆ๊ฐ์ผ์„ ๊ฐ€์ ธ์˜ฌ๋•Œ ๋…„, ์›”, ์ผ์„ ์ œ์™ธํ•œ Date๊ฐ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๊ฐ€์ ธ์˜ค๋ฉด ๋˜๊ฒ ๋„ค!

์˜ค๋Š˜์˜ ๋‚ ์งœ์—์„œ ์ž„๋ฐ•ํ•œ ์ˆœ์œผ๋กœ ๊ฒŒ์‹œ๋ฌผ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

// ๋งˆ๊ฐ์ผ์ˆœ์œผ๋กœ ์ •๋ ฌ
    @SuppressLint("NotifyDataSetChanged")
    private fun sortPostDeadline() {
        Log.d("menu", "๋งˆ๊ฐ์ผ ์ˆœ์œผ๋กœ ์ •๋ ฌ")

        val currentDate = System.currentTimeMillis()

        // ๋งˆ๊ฐ์ผ์— ๋”ฐ๋ฅธ ์ •๋ ฌ
        communityList.sortWith(compareBy { post ->
        	// ๊ฒŒ์‹œ๋ฌผ ๋งˆ๊ฐ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ
            val deadlineDate = post.deadlinedate
            // ๋งˆ๊ฐ์ผ ๋ฌธ์ž์—ด์„ Date ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜
            val dateFormat = SimpleDateFormat("yyyy๋…„ MM์›” dd์ผ", Locale.getDefault())
            // Date ๊ฐ์ฒด๋กœ ํŒŒ์‹ฑ
            val date = dateFormat.parse(deadlineDate)
            // ๋ฐ€๋ฆฌ์ดˆ๋กœ ๋ณ€ํ™˜
            val deadline = date?.time ?: 0
            (deadline - currentDate).toInt()
        })
        communityPageAdapter.addItem(communityList)
        communityPageAdapter.notifyDataSetChanged()
    }

์‹คํ–‰ ๊ฒฐ๊ณผ


์ฝ”๋“œ ์ˆ˜์ •ํ•˜๊ธฐ (2)

์˜ค๋Š˜์˜ ๋‚ ์งœ์—์„œ ์ž„๋ฐ•ํ•œ ์ˆœ์œผ๋กœ ๊ฒŒ์‹œ๋ฌผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ

// ๋งˆ๊ฐ์ผ์ˆœ์œผ๋กœ ์ •๋ ฌ
    @SuppressLint("NotifyDataSetChanged")
    private fun sortPostDeadline() {
        Log.d("menu", "๋งˆ๊ฐ์ผ ์ˆœ์œผ๋กœ ์ •๋ ฌ")

        val currentDate = System.currentTimeMillis()

        // ๋งˆ๊ฐ์ผ์— ๋”ฐ๋ฅธ ์ •๋ ฌ
        communityList.sortWith(compareBy { post ->
            val deadlineDate = post.deadlinedate
            val dateFormat = SimpleDateFormat("yyyy๋…„ MM์›” dd์ผ", Locale.getDefault())
            val date = dateFormat.parse(deadlineDate)
            val deadline = date?.time ?: 0
            (currentDate - deadline).toInt()
        })
        communityPageAdapter.addItem(communityList)
        communityPageAdapter.notifyDataSetChanged()
    }

์‹คํ–‰ ๊ฒฐ๊ณผ


๋‚ด ๊ธ€ ์ˆœ์œผ๋กœ ์ •๋ ฌ

ํ˜„์žฌ ๋กœ๊ทธ์ธ๋œ ๊ณ„์ •์˜ ์œ ์ €๊ฐ€ ์˜ฌ๋ฆฐ ๊ฒŒ์‹œ๋ฌผ๋งŒ ์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ

์ƒ๊ฐํ•œ ์ฝ”๋“œ

ํ˜„์žฌ user์ธ์ง€ ํ™•์ธํ•˜๊ณ  ๊ฒŒ์‹œ๊ธ€์˜ ์ž‘์„ฑ์ž๊ฐ€ ํ˜„์žฌ ๋กœ๊ทธ์ธ๋œ user์˜ ๋‹‰๋„ค์ž„์ด ๋™์ผํ•  ๊ฒฝ์šฐ์˜ ๊ฒŒ์‹œ๋ฌผ๋งŒ ๋ณด์ด๋„๋ก ์„ค์ •ํ•ด์ฃผ๊ณ ์ž ํ–ˆ๋‹ค.

 // ๋‚ด ๊ธ€๋กœ ์ •๋ ฌ
    @SuppressLint("NotifyDataSetChanged")
    private fun sortPostMine() {
        Log.d("menu", "๋‚ด ๊ธ€๋กœ๋งŒ ์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌ")
        communityList.map { it.nickname }.forEach {
            Log.d("menu", it) }

        val currentUser = auth.currentUser
        if(currentUser != null) {
        	Log.d("currentUseruid", "$currentUser.uid")
            // ๋‹‰๋„ค์ž„๊ณผ ํ˜„์žฌ ๋กœ๊ทธ์ธ๋œ ์œ ์ €์™€ ๋™์ผํ•˜๋ฉด
            val myPost = communityList.filter { it.nickname == currentUser.uid }
            myPost.sortedBy { it.date }
            Log.d("myPost", "$myPost")
            val myPostMutable = myPost.toMutableList()
            communityPageAdapter.addItem(myPostMutable)
        }

        communityPageAdapter.notifyDataSetChanged()
    }

์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•„, ๋กœ๊ทธ๋ฅผ ์ฐ์–ด์„œ ํ™•์ธํ•ด๋ณด๋‹ˆ uid์˜ ๊ฐ’๊ณผ nickname์ด ๋™์ผํ•œ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ์žˆ์—ˆ๊ณ ... ์ด๋Ÿฌ๋‹ˆ ์•„๋ฌด๋Ÿฐ ๊ฒŒ์‹œ๊ธ€๋„ ์•ˆ๋œจ์ง€..


์ฝ”๋“œ ์ˆ˜์ •

ํŒŒ์ด์–ด๋ฒ ์ด์Šค์˜ RealTimeDB์— ์ €์žฅ๋˜๋Š” ๋‹‰๋„ค์ž„์˜ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด,
users - uid - nickname ์ด๋‹ค.

users ๊ฒฝ๋กœ์—์„œ userId์˜ nickname ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๋„๋ก firebaseDatabase ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ snapshot์ด ์กด์žฌํ•˜๋ฉด ์ด๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์œผ๋กœ, ํ˜„์žฌ ๋กœ๊ทธ์ธ๋œ ๊ณ„์ •์˜ nickname๊ณผ ๊ฒŒ์‹œ๋ฌผ์˜ nickname์„ ๋น„๊ตํ•ด ๊ฐ™์€ ๊ฒŒ์‹œ๋ฌผ๋“ค๋งŒ ๋‚˜์˜ค๋„๋ก ๊ตฌํ˜„ํ•ด์ฃผ์—ˆ๋‹ค.

@SuppressLint("NotifyDataSetChanged")
    private fun sortPostMine() {
        Log.d("menu", "๋‚ด ๊ธ€๋กœ๋งŒ ์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌ")
        val currentUser = auth.currentUser
        if(currentUser != null) {
            val userId = currentUser.uid

            firebaseDatabase.child("users").child(userId).child("nickname")
                .addListenerForSingleValueEvent(object : ValueEventListener {
                    override fun onDataChange(snapshot: DataSnapshot) {
                        if(snapshot.exists()) {
                            val currentNickname = snapshot.getValue(String ::class.java)
                            val myPost = communityList.filter { it.nickname == currentNickname }
                            val sortedMyPost = myPost.sortedBy { it.date }
                            Log.d("MyPost", "$sortedMyPost")
                            communityPageAdapter.addItem(sortedMyPost.toMutableList())
                            communityPageAdapter.notifyDataSetChanged()
                        }
                    }
                    override fun onCancelled(error: DatabaseError) {
                    }
                })
        }
    }

์‹คํ–‰ ๊ฒฐ๊ณผ

profile
์†Œ์†Œํ•œ ์ฝ”๋”ฉ ์ผ๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€