이번 시간에는 채팅앱 마지막 시간
전송한 메시지 화면에 보여주는 방법 알아보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.10.27 - [안드로이드] - [안드로이드 코틀린] 채팅앱 만드는 방법 part8 - 메시지 보내기
[안드로이드 코틀린] 채팅앱 만드는 방법 part8 - 메시지 보내기
이번 시간에는 채팅앱 만들기 여덟 번째 시간 메시지 보내는 방법에 대하여 알아보겠습니다. 이전 포스팅은 아래 링크를 들어가시면 됩니다. 2022.10.26 - [안드로이드] - [안드로이드 코틀린] 채팅
aries574.tistory.com
- 설명 -
1. 받은 메시지 보여주는 TextView
2022.01.01 - [안드로이드] - [안드로이드 스튜디오] 레이아웃 추가하는 방법
[안드로이드 스튜디오] 레이아웃 추가하는 방법
이번 시간에는 안드로이드 스튜디오에서 레이아웃 추가하는 방법을 알아보겠습니다. 안드로이드 프로젝트를 만들면 java폴더에는 MainActivity 파일이 있고, res -> layout 폴더에는 activity_main.xml 파일
aries574.tistory.com
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/receive_message_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_margin="5dp"
android:background="@drawable/edit_background"
android:padding="10dp"
android:text="받는 메시지"
android:textSize="18sp" />
</RelativeLayout>
- 설명 -
1. 보낸 메시지 보여주는 TextView
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/send_message_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_margin="5dp"
android:background="@drawable/btn_background"
android:padding="10dp"
android:text="보내는 메시지"
android:textColor="@android:color/white"
android:textSize="18sp" />
</RelativeLayout>
- 설명 -
1. SentViewHolder
보낸 쪽 ViewHolder
2. ReceiveViewHolder
받는 쪽 ViewHolder
3. getItemViewType
ViewHolder 타입 리턴하는 함수
4. onCreateViewHolder
화면 연결해주는 함수
5. onBindViewHolder
데이터 연결해주는 함수
class MessageAdapter(private val context: Context, private val messageList: ArrayList<Message>):
RecyclerView.Adapter<RecyclerView.ViewHolder>(){
private val receive = 1 //받는 타입
private val send = 2 //보내는 타입
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if(viewType == 1){ //받는 화면
val view: View = LayoutInflater.from(context).inflate(R.layout.receive, parent, false)
ReceiveViewHolder(view)
}else{ //보내는 화면
val view: View = LayoutInflater.from(context).inflate(R.layout.send, parent, false)
SendViewHolder(view)
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
//현재 메시지
val currentMessage = messageList[position]
//보내는 데이터
if(holder.javaClass == SendViewHolder::class.java){
val viewHolder = holder as SendViewHolder
viewHolder.sendMessage.text = currentMessage.message
}else{//받는 데이터
val viewHolder = holder as ReceiveViewHolder
viewHolder.receiveMessage.text = currentMessage.message
}
}
override fun getItemCount(): Int {
return messageList.size
}
override fun getItemViewType(position: Int): Int {
//메시지값
val currentMessage = messageList[position]
return if(FirebaseAuth.getInstance().currentUser?.uid.equals(currentMessage.sendId)){
send
}else{
receive
}
}
//보낸 쪽
class SendViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
val sendMessage: TextView = itemView.findViewById(R.id.send_message_text)
}
//받는 쪽
class ReceiveViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
val receiveMessage: TextView = itemView.findViewById(R.id.receive_message_text)
}
}
- 설명 -
1. addValueEventListener
데이터 추가 리스너
onDataChange 함수 통해 데이터 변화 감지
class ChatActivity : AppCompatActivity() {
private lateinit var receiverName: String
private lateinit var receiverUid: String
//바인딩 객체
private lateinit var binding: ActivityChatBinding
lateinit var mAuth: FirebaseAuth //인증 객체
lateinit var mDbRef: DatabaseReference//DB 객체
private lateinit var receiverRoom: String //받는 대화방
private lateinit var senderRoom: String //보낸 대화방
private lateinit var messageList: ArrayList<Message>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityChatBinding.inflate(layoutInflater)
setContentView(binding.root)
//초기화
messageList = ArrayList()
val messageAdapter: MessageAdapter = MessageAdapter(this, messageList)
//RecyclerView
binding.chatRecyclerView.layoutManager = LinearLayoutManager(this)
binding.chatRecyclerView.adapter = messageAdapter
//넘어온 데이터 변수에 담기
receiverName = intent.getStringExtra("name").toString()
receiverUid = intent.getStringExtra("uId").toString()
mAuth = FirebaseAuth.getInstance()
mDbRef = FirebaseDatabase.getInstance().reference
//접속자 uId
val senderUid = mAuth.currentUser?.uid
//보낸이방
senderRoom = receiverUid + senderUid
//받는이방
receiverRoom = senderUid + receiverUid
//액션바에 상대방 이름 보여주기
supportActionBar?.title = receiverName
//메시지 전송 버튼 이벤트
binding.sendBtn.setOnClickListener {
val message = binding.messageEdit.text.toString()
val messageObject = Message(message, senderUid)
//데이터 저장
mDbRef.child("chats").child(senderRoom).child("messages").push()
.setValue(messageObject).addOnSuccessListener {
//저장 성공하면
mDbRef.child("chats").child(receiverRoom).child("messages").push()
.setValue(messageObject)
}
//입력값 초기화
binding.messageEdit.setText("")
}
//메시지 가져오기
mDbRef.child("chats").child(senderRoom).child("messages")
.addValueEventListener(object: ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
messageList.clear()
for(postSnapshat in snapshot.children){
val message = postSnapshat.getValue(Message::class.java)
messageList.add(message!!)
}
//적용
messageAdapter.notifyDataSetChanged()
}
override fun onCancelled(error: DatabaseError) {
}
})
}
}
2022.03.16 - [안드로이드] - [안드로이드] Firebase Storage 이미지 업로드 part1
[안드로이드] Firebase Storage 이미지 업로드 part1
이번 시간에는 Firebase를 통해서 이미지를 업로드하는 방법을 알아보겠습니다. 간단하게 설명하자면 Firebase의 Storage에 이미지를 업로드하고, 이미지가 저장된 주소를 Realtime Database에 저장합니다.
aries574.tistory.com
2022.03.09 - [안드로이드] - [안드로이드] Firebase 시작하기 실시간 데이터베이스 Realtime Database (간단한 데이터 읽기, 쓰기) part1
[안드로이드] Firebase 시작하기 실시간 데이터베이스 Realtime Database (간단한 데이터 읽기, 쓰기) part
이번 시간에는 Firebase를 통해 데이터베이스에 간단한 데이터를 쓰고 읽는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 프로젝트 만들기 3. 앱 만들기 4. 데이터 베이스 만들기 5. 라이브러
aries574.tistory.com
2022.03.19 - [안드로이드] - [안드로이드] 간단한 할 일 목록(ToDoList) 쉽게 만드는 방법
[안드로이드] 간단한 할 일 목록(ToDoList) 쉽게 만드는 방법
이번 시간에는 간단한 할 일 목록(ToDoList) 만드는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 아이템 화면 만들기 3. 메인 화면 구성 activity_main.xml 4. 메인 코드 구현 MainActivity.java 1. 실행 화면..
aries574.tistory.com
[안드로이드 코틀린] 파이어베이스 사용자 CRUD 만드는 방법 part2 - 사용자 등록 (0) | 2022.11.08 |
---|---|
[안드로이드 코틀린] 파이어베이스 사용자 CRUD 만드는 방법 part1 - 프로젝트 생성 (0) | 2022.11.07 |
[안드로이드 코틀린] 채팅앱 만드는 방법 part8 - 메시지 보내기 (0) | 2022.10.27 |
[안드로이드 코틀린] 채팅앱 만드는 방법 part7 - 채팅 액티비티 (0) | 2022.10.26 |
[안드로이드 코틀린] 채팅앱 만드는 방법 part6 - Firebase 메뉴 생성 및 로그아웃 (2) | 2022.10.25 |
댓글 영역