이번 시간에는 채팅앱 만들기 일곱 번째 시간
대화 상대를 선택해서 대화 화면으로 이동하는 방법을 알아보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.10.25 - [안드로이드] - [안드로이드 코틀린] 채팅앱 만드는 방법 part6 - Firebase 메뉴 생성 및 로그아웃
app 선택 -> 마우스 오른쪽 클릭 -> New -> Activity -> Empty Activity
Activity name: ChatActivity
- 설명 -
1. 대화 내용 보여줄 RecyclerView
2. 메시지 입력 EditText
3. 메시지 전송 Button
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ChatActivity">
<!-- 대화 내용 -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/chat_recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/input_layout"
android:layout_alignParentTop="true" />
<!-- 입력 레이아웃 -->
<LinearLayout
android:id="@+id/input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="10dp"
android:orientation="horizontal"
android:weightSum="100">
<EditText
android:id="@+id/message_edit"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_marginStart="10dp"
android:layout_weight="85"
android:background="@drawable/edit_background"
android:hint="메시지를 입력하세요"
android:paddingStart="10dp" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/send_btn"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_weight="15"
android:background="@drawable/btn_background"
android:text="전송"
android:textColor="@android:color/white" />
</LinearLayout>
</RelativeLayout>
- 설명 -
1. intent.getStringExtra("name").toString()
넘어온 상대방 이름
2. intent.getStringExtra("uid").toString()
넘어온 상대방 uId
3. supportActionBar?.title = receiverName
액션 바에 상대방 이름 보여주기
class ChatActivity : AppCompatActivity() {
private lateinit var receiverName: String
private lateinit var receiverUid: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_chat)
//넘어온 데이터 변수에 담기
receiverName = intent.getStringExtra("name").toString()
receiverUid = intent.getStringExtra("uId").toString()
//액션바에 상대방 이름 보여주기
supportActionBar?.title = receiverName
}
}
- 설명 -
1. holder.itemView.setOnClickListener
아이템 클릭 이벤트
2. intent.putExtra("name", currentUser.name)
넘겨줄 상대방 이름 담기
3. intent.putExtra("uid", currentUser.uId)
넘겨줄 상대방 uId 담기
class UserAdapter(private val context: Context, private val userList: ArrayList<User>):
RecyclerView.Adapter<UserAdapter.UserViewHolder>(){
/**
* 화면 설정
*/
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserViewHolder {
val view: View = LayoutInflater.from(context).
inflate(R.layout.user_layout, parent, false)
return UserViewHolder(view)
}
/**
* 데이터 설정
*/
override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
//데이터 담기
val currentUser = userList[position]
//화면에 데이터 보여주기
holder.nameText.text = currentUser.name
//아이템 클릭 이벤트
holder.itemView.setOnClickListener {
val intent = Intent(context, ChatActivity::class.java)
//넘길 데이터
intent.putExtra("name", currentUser.name)
intent.putExtra("uId", currentUser.uId)
context.startActivity(intent)
}
}
/**
* 데이터 갯수 가져오기
*/
override fun getItemCount(): Int {
return userList.size
}
class UserViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
val nameText: TextView = itemView.findViewById(R.id.name_text)
}
}
2022.10.14 - [안드로이드] - [안드로이드 코틀린] 텍스트뷰 TextView 동적으로 생성하는 방법
2022.09.28 - [안드로이드] - [안드로이드 코틀린] HTTP 통신 Retrofit2 사용법 part1 - 권한 및 설정
2022.10.06 - [안드로이드] - [안드로이드 코틀린] tic-tac-toe 보드게임 만드는 방법 part1 - 뷰 바인딩 및 화면 구성
[안드로이드 코틀린] 채팅앱 만드는 방법 part9 - 메시지 가져오기 (0) | 2022.10.28 |
---|---|
[안드로이드 코틀린] 채팅앱 만드는 방법 part8 - 메시지 보내기 (0) | 2022.10.27 |
[안드로이드 코틀린] 채팅앱 만드는 방법 part6 - Firebase 메뉴 생성 및 로그아웃 (2) | 2022.10.25 |
[안드로이드 코틀린] 채팅앱 만드는 방법 part5 - Firebase 사용자 리스트 (0) | 2022.10.24 |
[안드로이드 코틀린] 채팅앱 만드는 방법 part4 - Firebase 로그인 기능과 사용자 저장 기능 (0) | 2022.10.21 |
댓글 영역