팀 프로젝트 과제
이번에는 저번 포스팅에서 끊긴 내용을 써내려 보려고 한다. 저번에는 리스트뷰를 만들기 위해 빌드업한 포스팅을 이어가는 포스팅이다. 사실 팀 프로젝트의 핵심은 UI가 어떤 기기에서도 정상적으로 UI가 뜨게 xml을 수정하는것에 중심을 둔 과제인것 같지만 우리 팀은 필수 구현과제를 다하고 리스트뷰를 써보는거라 상관은 없을듯하다!! 그럼 이어서 내용에 대해 알아보자.

리스트뷰 어댑터
리스트뷰의 어댑터를 만들어보자 먼저 리스트뷰를 xml 파일 상에 만들어줬다면 이제 어댑터를 만들어야하는데 어댑터의 코드를 알아보자.
package com.example.snsproject.adapter
import android.content.Context
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.TextView
import com.example.snsproject.R
import com.example.snsproject.model.Member
import com.example.snsproject.model.Post
class MainPageItemAdapter(val context: Context,val postList:List<Post>) : BaseAdapter() {
override fun getCount(): Int {
return postList.size
}
override fun getItem(position: Int): Any {
return postList[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val view: View = LayoutInflater.from(context).inflate(R.layout.item_mainpage, parent,false)
val profileImageView = view.findViewById<ImageView>(R.id.main_page_profile_pic)
val nameTextView = view.findViewById<TextView>(R.id.mainpage_item_name)
val feedImageView = view.findViewById<ImageView>(R.id.mainpage_item_feed)
val contentTextView = view.findViewById<TextView>(R.id.mainpage_item_content)
val data = postList[position]
val profileId = context.resources.getIdentifier(data.author, "drawable", context.packageName)
profileImageView.setImageResource(profileId)
val data1=postList[position]
val feedId = context.resources.getIdentifier(data1.postImg, "drawable", context.packageName)
feedImageView.setImageResource(feedId)
nameTextView.text=data.author
val post = data.content
contentTextView.text = post
return view
}
}
어댑터의 코드는 이러하다 근데 팀장님이 데이터 클래스를 만들어 주시면서 이미지 파일은 Int로 가야하는데 왜 String이지 하면서 선언이 안되어서 혼자 막 찾아보다가 팀원들에게 구원을 받아서 해결하게 되었는데
val profileId = context.resources.getIdentifier(data.author, "drawable", context.packageName)
이 부분의 코드가 해결 방법이였다. 팀장님이 주석 처리로 해놓으셨는데 설명을 해주실때 다른걸 보고 있었나보다...^^ 그래서 이게 뭐냐면 Identifier을 사용하면서 String으로 된 이미지 파일을 String으로 지정되어있는 list에서 불러와서 이미지 파일이 Int로 되어있지 않아도 String을 불러와서 가능하게된다! 약간 형변환?이라고 생각을 하면 될것 같다.
이렇게 어댑터를 마쳤다면 내가 구현한 메인에서 뜨게 해야한다! 메인의 코드를 보자
package com.example.snsproject.ui.activity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageButton
import android.widget.ListView
import android.widget.Toast
import com.example.snsproject.R
import com.example.snsproject.adapter.MainPageItemAdapter
import com.example.snsproject.manager.MemberManager
import com.example.snsproject.manager.MemberManagerImpl
class MainPageActivity : AppCompatActivity() {
private lateinit var memberManager: MemberManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_page)
memberManager = MemberManagerImpl.getInstance()
val listView: ListView = findViewById(R.id.main_page_listview)
val allMembers = memberManager.findAllMember()
val adapter = MainPageItemAdapter(this,allMembers.flatMap { it.post })
listView.adapter = adapter
val myImgButton = findViewById<ImageButton>(R.id.my_img)
myImgButton.setOnClickListener {
// 클릭 시 토스트 메시지 띄우기
Toast.makeText(this, "ImageButton 클릭됨", Toast.LENGTH_SHORT).show()
}
}
}
어댑터에서 필요한 데이터들을 처리해주어서 메인에서는 메소드 느낌으로 코드를 불러와서 사용하면된다! 그리고 큰 문제가 하나가 있었는데 이렇게 어댑터랑 메인이랑 다 만들어놓고 manifest에서 처음에 실행되는 액티비티를 수정을 안해서 내가 만든 리스트뷰가 뜨지 않는 이슈가 있었는데 이것도 코드를 옮겨보고 해봐서 잘 실행이 되는걸로 확인했다!! 아직 팀원들과 코드를 합치긴했으나 화면이 넘어가는 부분은 연결이 안되어서 확인을 하려면 다 수정해야해서.. 일단 결과 화면은 내일 수정하고 보는게 좋을것 같다!
프로젝트 심화
프로젝트 심화 단계에 들어가면서 내 생각을 정리해보자면 우리 팀에는 모두가 팀원이 아니고 튜터님이 한분 계시는것 같은 느낌이 들었다..대단하시다..내가 이상하게 말해도 찰떡같이 알아들으시는분...정말 대단!! 이제 벌써 이번주도 광복절로 쉬는날이 있었어서 한주가 금방 끝나갈것 같다. 그래서 일요일날 과제 제출이긴한데! 금요일날 다 끝내는 느낌일것 같고! 우리 팀은 이제 디자인적인 요소만 수정하면 완벽하게 만들어질것 같다. 내일도 화이팅이고 앞으로도 화이팅이다! 수고~