안드로이드

안드로이드 유튜브 스타일 모션레이아웃(2) - 메인화면 구성

알통몬_ 2020. 3. 18. 11:46
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


지난 포스팅에서 필요한 xml과 리소스를 모두 구성해봤는데요.

이번에는 아래처럼 메인화면을 구성해보겠습니다.


지난 포스팅에서 기본 구성은 끝이 났죠?

이번 포스팅에서는 2개의 .kt 파일을 생성하고 

MainActivity의 코드를작성합니다.


#1. FragmentHomeAdapter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
class FragmentHomeAdapter(private val context: Context, private val videos: Videos) :
    RecyclerView.Adapter<FragmentHomeAdapter.HomeViewHolder>() {
 
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HomeViewHolder {
        val inflater = LayoutInflater.from(parent.context)
        val itemView = inflater.inflate(viewType, parent, false)
        return when(viewType) {
            R.layout.item_toolbar -> HomeViewHolder.HomeToolbarViewHolder(itemView)
            R.layout.item_video -> HomeViewHolder.HomeContentsViewHolder(itemView)
            else -> throw IllegalStateException("Unknown viewType $viewType")
        }
    }
 
    override fun onBindViewHolder(holder: HomeViewHolder, position: Int) {
        when(holder) {
            is HomeViewHolder.HomeToolbarViewHolder -> {
 
            }
 
            is HomeViewHolder.HomeContentsViewHolder -> {
                holder.uploaderImg.apply {
                    background = ShapeDrawable(OvalShape())
                    clipToOutline = true
                }
                Glide.with(context).load(videos.thumbnail[position - 1]).into(holder.thumbnail)
                Glide.with(context).load(videos.thumbnail[position - 1]).into(holder.uploaderImg)
                holder.description.text = videos.videoNames[position - 1]
                holder.uploader.text = videos.videoUploader[position - 1]
            }
        }
 
    }
 
    override fun getItemViewType(position: Int): Int {
        return when(position) {
            -> R.layout.item_toolbar
            else -> R.layout.item_video
        }
    }
 
    override fun getItemCount() = Videos.video.size + 1
 
 
 
    sealed class HomeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
 
        class HomeToolbarViewHolder(itemView: View) : HomeViewHolder(itemView) {
 
        }
 
        class HomeContentsViewHolder(itemView: View) : HomeViewHolder(itemView) {
 
            val thumbnail = itemView.findViewById(R.id.videoThumbnailImageView) as AppCompatImageView
            val description = itemView.findViewById(R.id.videoDescriptionTxtView) as AppCompatTextView
            val uploader = itemView.findViewById(R.id.videoUploaderTxtView) as AppCompatTextView
            val uploaderImg = itemView.findViewById(R.id.uploaderImgView) as AppCompatImageView
        }
 
    }
}
cs

#2. FragmentHome

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class FragmentHome: Fragment() {
 
    companion object {
        private val TAG = FragmentHome::class.java.simpleName
    }
 
 
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_home, container, false)
        val homeRecyclerView = view.findViewById<RecyclerView>(R.id.homeRecyclerView)
        homeRecyclerView.apply {
            layoutManager = LinearLayoutManager(context)
            isNestedScrollingEnabled = false
            adapter = FragmentHomeAdapter(context, Videos)
        }
 
        return view
    }
}
cs

#3. MainActivity 코드작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class MainActivity : AppCompatActivity() {
 
    private val fragmentHome = FragmentHome()
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        bottom_nav.setOnNavigationItemSelectedListener(MenuItemSelectedListener())
        bottom_nav.selectedItemId = R.id.navigation_home
 
    }
 
 
    // BottomNavigationView TouchEvent
    inner class MenuItemSelectedListener: BottomNavigationView.OnNavigationItemSelectedListener {
        override fun onNavigationItemSelected(item: MenuItem): Boolean {
            val transaction = supportFragmentManager.beginTransaction()
            when (item.itemId) {
                R.id.navigation_home -> {
 
                    transaction.replace(R.id.page_container, fragmentHome)
                        .commitAllowingStateLoss()
                }
            }
            return true
        }
    }
}
 
cs


이상입니다.

반응형