티스토리 뷰
이전 글인 [안드로이드] MQTT를 이용한 채팅서비스 만들기(1) 를 통해서 MQTT가 무엇인지 알아보았습니다.
이제 MQTT를 사용하여 간단한 안드로이드 채팅 앱을 만들어보겠습니다. MQTT 이외의 내용은 빠르게 코드만 보고 넘어가겠습니다.
1) 커스텀 ListView 만들기
간단하게 ListView를 사용하여 채팅창을 구현할 것입니다. 이 때, 기본적인 ListView로도 할 수 있지만 id와 content(내용)을 같이 표현해주기 위해 커스텀 ListView를 사용하겠습니다. chatting_list.xml 파일을 새로 만들고 다음과 같이 만들어 주었습니다. TextView 2개로 id와 content를 표현 할 예정입니다.
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 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="5dp"> <TextView android:id="@+id/idText" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_weight="1" android:text="id" android:textSize="12dp" android:textColor="@android:color/black" /> <TextView android:id="@+id/contentText" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="5" android:text="content" android:textSize="12dp" android:textColor="@android:color/black" /> </LinearLayout> </LinearLayout> | cs |
2) 커스텀 Adapter
커스텀 ListView를 만들었으니 해당 ListView layout을 사용할 Adapter를 만들어 보겠습니다.
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 | public class ChatAdapter extends BaseAdapter { private ArrayList<ChatItem> chatList = new ArrayList<>(); public void add(ChatItem chatItem){ chatList.add(chatItem); } @Override public int getCount() { return chatList.size(); } @Override public Object getItem(int i) { return chatList.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(convertView == null){ convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.chatting_list,parent,false); viewHolder = new ViewHolder(); viewHolder.idTextView = convertView.findViewById(R.id.idText); viewHolder.contentTextView = convertView.findViewById(R.id.contentText); convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder)convertView.getTag(); } viewHolder.idTextView.setText(chatList.get(position).getId()); viewHolder.contentTextView.setText(chatList.get(position).getContent()); return convertView; } private class ViewHolder{ TextView idTextView; TextView contentTextView; } } | cs |
ListView와 Adapter를 연결해 줍니다. ListView의 경우 butterknife를 사용해서 정의하였습니다.
1 2 3 4 5 6 | private ChatAdapter chatAdapter; @BindView(R.id.chatList) ListView chatListView; chatAdapter = new ChatAdapter(); chatListView.setAdapter(chatAdapter); | cs |
3) ChatItem DTO(Data Transfer Object)
저의 경우엔 Adapter에서 List의 제너릭 타입으로 ChatItem을 보실 수 있습니다. 이는 채팅창에 필요한 Id와 Content를 하나로 관리하기 위해서 ChatItem Class를 따로 만들어 주었습니다.
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 | public class ChatItem { private String id; private String content; public ChatItem(String id, String content) { this.id = id; this.content = content; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } } | cs |
이제 기본적인 준비가 끝났습니다. 다음 글에서 MQTT에 관한 내용을 마무리 짓도록 하겠습니다.
'안드로이드' 카테고리의 다른 글
[안드로이드] WebView를 이용한 간단한 Javascript 통신 (0) | 2018.07.04 |
---|---|
[안드로이드] MQTT를 이용한 채팅서비스 만들기(3) (16) | 2018.05.02 |
[안드로이드] MQTT를 이용한 채팅서비스 만들기(1) (0) | 2018.04.24 |
[안드로이드] ListView 클릭해야 갱신될 경우 (0) | 2018.04.17 |
[안드로이드] 앱(App)에 폰트 적용하기(TypeKit) (0) | 2018.04.07 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday