> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-rn-guide-message-privately.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# UI Components

> UI Components — CometChat documentation.

**UI Components** are building a block of the UI Kit. **UI Components** are a set of custom classes specially designed to build a feature-rich chat app. To achieve high customizability while building an app one can use the UI Components. There are different UI Components available in the UI Kit library.

## **CometChatUI**

**CometChatUI** is an option to launch a fully functional chat application using the UI Kit. In **CometChatUI** all the UI Components are interlinked and work together to launch a fully functional chat on your mobile application.

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/ubfBSdV1t6rmjxeA/images/8e0972b8-ui-a3d5f721eb5f46fc3c1e01001c515b2a.png?fit=max&auto=format&n=ubfBSdV1t6rmjxeA&q=85&s=7d88ff0dca10e2c55cc8f148a4729592" width="4260" height="2800" data-path="images/8e0972b8-ui-a3d5f721eb5f46fc3c1e01001c515b2a.png" />
</Frame>

CometChatUI is an Activity class, so you can launch `CometChatUI` using the below code snippet Make sure to add the following code snippet after `onSuccess` of CometChat login.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    startActivity(new Intent(this, CometChatUI.java))   
    //Replace "this" with Activity Ex: MainActivity.this
    ```
  </Tab>
</Tabs>

<Note>
  Make sure that the above code snippet is added after `onSuccess` of CometChat login.
</Note>

***

## **CometChatConversationList**

The **CometChatConversationList** is Fragment which will help you to display list of recent conversations. The Fragment has all the necessary listeners and methods required to display the list of conversations.

### **Usage**

In your `layout.xml` add the following snippet to use the `CometChatConversationListScreen`.Adding the following code snippet will give you a fully working list of conversations.

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <fragment
    android:id="@+id/conversationList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class=" com.cometchat.pro.uikit.
    ui_components.chats.CometChatConversationList "
    />
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/PrOf0fpV33FkfOMB/images/11ae694f-callslist-d7222819bbd06871770abb1d17e9fd1c.png?fit=max&auto=format&n=PrOf0fpV33FkfOMB&q=85&s=5f83b3eff5f8d0a133c97b27dfd2c2da" width="434" height="768" data-path="images/11ae694f-callslist-d7222819bbd06871770abb1d17e9fd1c.png" />
</Frame>

<Note>
  Note About setItemClickListener on CometChatConversationList

  To get the click event of the list you must use `setItemClickListener`. The `setItemClickListener` has `OnItemClick()` to handle single click and `OnItemLongClick()` to handle long click events.
</Note>

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    CometChatConversationList.setItemClickListener(new OnItemClickListener<Conversation>()
            {
                @Override
                public void OnItemClick(Conversation conversation, int position) {
                	//Perform Your Action
                }

                @Override
                public void OnItemLongClick(Conversation var, int position) {
                    super.OnItemLongClick(var, position);
                }
            });
    ```
  </Tab>
</Tabs>

***

## **CometChatUserList**

The `CometChatUserList` is a fragment with a List of users. The Fragment has all the necessary listeners and methods required to display the user's list.

### **Usage**

In your `layout.xml` add the following snippet to use the `CometChatUserList`. Adding the following code snippet will give you a fully working list of users.

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <fragment
    android:id="@+id/userList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.cometchat.pro.uikit
    .ui_components.users.user_list.CometChatUserList"
    />
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/Xgdtn9VZPDi47bm-/images/2602bbfb-userlist-509daec9703bb45748b1856eb9384b67.png?fit=max&auto=format&n=Xgdtn9VZPDi47bm-&q=85&s=703b5735914f0973f0a8ecaf444f8d6d" width="438" height="750" data-path="images/2602bbfb-userlist-509daec9703bb45748b1856eb9384b67.png" />
</Frame>

<Note>
  Note About setItemClickListener on CometChatUserList

  To get the click event of the list you must use `setItemClickListener`. The `setItemClickListener` has `OnItemClick()` to handle single click and `OnItemLongClick()` to handle long click events.
</Note>

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    CometChatUserList.setItemClickListener(new OnItemClickListener<User>()
            {
                @Override
                public void OnItemClick(User user, int position) {
                		//Perform Your Action
                }

                @Override
                public void OnItemLongClick(User var, int position) {
                    super.OnItemLongClick(var, position);
                }
            });
    ```
  </Tab>
</Tabs>

***

## **CometChatGroupList**

The `CometChatGroupList` is a fragment with a List of groups Fragment has all the necessary listeners and methods required to display the list of groups

### **Usage**

In your `layout.xml` add the following snippet to use the `CometChatGroupList`.Adding the following code snippet will give you a full working list of groups.

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <fragment
    android:id="@+id/groupList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.cometchat.pro.uikit
    .ui_components.groups.group_list.CometChatGroupList"
    />
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/NN4EdpOU3viwWMb_/images/09ad6981-grouplist-4d611a98845f18221c04b88f13bcd530.png?fit=max&auto=format&n=NN4EdpOU3viwWMb_&q=85&s=47becd4ed7ee226b04c3e325dde22f4b" width="418" height="758" data-path="images/09ad6981-grouplist-4d611a98845f18221c04b88f13bcd530.png" />
</Frame>

<Note>
  Note About setItemClickListener on CometChatGroupList

  To get the click event of the list you must use `setItemClickListener`. The `setItemClickListener` has `OnItemClick()` to handle single click and `OnItemLongClick()` to handle long click events.
</Note>

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    CometChatGroupList.setItemClickListener(new OnItemClickListener<Group>()
            {
                @Override
                public void OnItemClick(Group group, int position) {
                			//Perform your action
                }

                @Override
                public void OnItemLongClick(Group var, int position) {
                    super.OnItemLongClick(var, position);
                }
            });
    ```
  </Tab>
</Tabs>

***

## **CometChatMessageList**

`CometChatMessageList` is a fragment that consists of send and received messages. It is capable of sending and receiving different types of messages such as text, image, and documents.

### **Usage**

To use `CometChatMessageList` follow the below code snippets. `CometChatMessageList` is a dynamic so it will require some arguments. Launch CometChatChatMessageListActivity using below code and pass the required parameters in intent.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    Intent intent = new Intent(YOURACTIVITY.this, CometChatMessageListActivity.class);
    intent.putExtra(UIKitConstants.IntentStrings.UID, user.getUid());
    intent.putExtra(UIKitConstants.IntentStrings.AVATAR, user.getAvatar());
    intent.putExtra(UIKitConstants.IntentStrings.STATUS, user.getStatus());
    intent.putExtra(UIKitConstants.IntentStrings.NAME, user.getName());
    intent.putExtra(UIKitConstants.IntentStrings.LINK,user.getLink());
    intent.putExtra(UIKitConstants.IntentStrings.TYPE, CometChatConstants.RECEIVER_TYPE_USER);
    startActivity(intent);
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/7a4hqm7gLVRmX34O/images/00244f25-messagelist-7d25f42b217faf0c488f279bb2aed507.png?fit=max&auto=format&n=7a4hqm7gLVRmX34O&q=85&s=85ae3eb00f76bf441a1cecdec0e70f74" width="1098" height="1902" data-path="images/00244f25-messagelist-7d25f42b217faf0c488f279bb2aed507.png" />
</Frame>

***

## **CometChatCallList**

You can use the CometChatCallList to get a list of all the calls made by the logged-in user to other users and groups.

### **Usage**

Add the following code in your `layout.xml`

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <fragment
    android:id="@+id/groupList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.cometchat.pro.uikit
    .ui_components.groups.group_list.CometChatGroupList"
    />
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/PrOf0fpV33FkfOMB/images/11ae694f-callslist-d7222819bbd06871770abb1d17e9fd1c.png?fit=max&auto=format&n=PrOf0fpV33FkfOMB&q=85&s=5f83b3eff5f8d0a133c97b27dfd2c2da" width="434" height="768" data-path="images/11ae694f-callslist-d7222819bbd06871770abb1d17e9fd1c.png" />
</Frame>

***

## **CometChatUserProfile**

`CometChatUserProfile` is a fragment which provides detail about the currently logged-in user in the CometChat.

### **Usage**

Add the following code in your `layout.xml`

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <fragment
    android:id="@+id/userInfo"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.cometchat.pro.uikit
    .ui_components.userprofile.CometChatUserProfile"
    />
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/FGBCGWXGo5d9bVxR/images/c153f8e5-profile34-f74cd1e468b06b47eba606e11c6b9f45.png?fit=max&auto=format&n=FGBCGWXGo5d9bVxR&q=85&s=709905bbc98bff3501c43f1793025f8f" width="442" height="764" data-path="images/c153f8e5-profile34-f74cd1e468b06b47eba606e11c6b9f45.png" />
</Frame>

***

## **Shared**

There are certain core components that are being used everywhere in `uiKit` library. You will find those components in `shared` folder under `ui_components`. Below are core components that are being used in `uiKit` library.

### **CometChatAvatar**

This is an image view customize only to display Avatar. This view can be used with image URLs as well as with CometChat objects like User and Group

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/mq8rEbFfi0JjKmkM/images/6358abd7-shared-d6a87eedb04fc11e26b4e97693ca9c5f.gif?s=ba3a2e1e1fc666aa2138f3d8120e9890" width="600" height="1067" data-path="images/6358abd7-shared-d6a87eedb04fc11e26b4e97693ca9c5f.gif" />
</Frame>

#### **Usage**

In your `layout.xml` add the following code snippet.

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatAvatar.CometChatAvatar
                android:id="@+id/av_user"
                android:layout_width="60dp"
                app:avatar_shape="@string/circle"
                android:layout_height="60dp" />
    ```
  </Tab>
</Tabs>

Here `avatar_shape` is a static property. It should be either `circle` or `rectangle`. whereas the avatar URL needs to be set dynamically following is the sample code for the same.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    CometChatAvatar avatar = findViewById(R.id.av_user);
    avatar.setAvatarUrl("https://randomuser.me/api/portraits/women/44.jpg");
    ```
  </Tab>
</Tabs>

The CometChatAvatar Component works well with CometChat `User` and `Group` object. The `setAvatar()` method accepts `User` or `Group` object if Avatar of `User` or `Group` is not available it automatically show the initials of the user or group name as a placeholder Avatar.

<Frame>
  <img src="data:image/png;base64,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" />
</Frame>

<Frame>
  <img src="data:image/png;base64,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" />
</Frame>

### **Common Features**

CometChatAvatar class provides functionality for an Avatar feature. There are commonly used properties to control the look of the Avatar.

| CometChatAvatar field element | Relevant attributes/methods                                                                                                                                                   |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Avatar Shape                  | `app:avatar_shape`                                                                                                                                                            |
| Avatar                        | app:avatar **Method**<br />- setAvatar(@NonNull User)<br />- setAvatar(@NonNull Group)<br />- setAvatar(@NonNull String)<br />- setAvatar(@NonNull Drawable, @NonNull String) |
| Avatar Initial                | app:avatar\_initials<br />**Method**<br />- setInitials(@NonNull String)                                                                                                      |
| Border Color                  | `app:border_color`                                                                                                                                                            |
| Border Width                  | `app:border_width`                                                                                                                                                            |

***

### **CometChatUserPresence**

This view will be used to show the user status if the user is online or offline. This view will take user status and display the color accordingly.

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/ugckbRl5Q-H7t8X2/images/e401dbd3-presence-0e66a4dda4a98b937cb7451aac11c4d3.gif?s=6c263bfe512db0601208f08f497a9571" width="600" height="1067" data-path="images/e401dbd3-presence-0e66a4dda4a98b937cb7451aac11c4d3.gif" />
</Frame>

#### **Usage**

In your `layout.xml` add the following code

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatUserPresence.CometChatUserPresence
                android:id="@+id/statusIndicator"
                android:layout_width="15dp"
                android:layout_height="15dp"
                app:user_status="@string/offline"
                />
    ```
  </Tab>
</Tabs>

User status can be set dynamically using the following code.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    CometChatUserPresence userPresence = findViewById(R.id.statusIndicator);
    userPresence.setUserStatus(user.getStatus());
    ```
  </Tab>
</Tabs>

### **Common Features**

CometChatUserPresence provides `app:user_status` attribute and method `setUserStatus` to set Status of the user.

The `app:user_status` attribute can also be used with DataBinding in the following manner

e.g `app:user_status="@{user.status}"` you can also use different objects according to their use case. The attribute will continue to work as long as receives a string parameter

| CometChatUserPresence field element | Relevant attributes/methods                                               |
| ----------------------------------- | ------------------------------------------------------------------------- |
| User Status                         | `app:user_status <br /><br />**Method** - setUserStatus(@NonNull String)` |

***

### **CometChatBadgeCount**

The CometChatBadgeCount component can be used to show an unread count. You can use it in different scenarios according to their use case.

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/k0f_g7UwNe_JINeP/images/452d3450-badge-5a7da331416a5a5512ba74e54e38f31c.gif?s=957df1377d91cfa35ae962ccda0cf35a" width="600" height="1067" data-path="images/452d3450-badge-5a7da331416a5a5512ba74e54e38f31c.gif" />
</Frame>

Add the following code to your `layout.xml`

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatBadgeCount.CometChatBadgeCount
                    android:id="@+id/messageCount"
                    android:layout_width="wrap_content"
                    app:count="2"
                    android:layout_height="wrap_content"/>
    ```
  </Tab>
</Tabs>

The count can be set dynamically using the `setCount` method. The `setCount` method takes an int as a parameter.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    CometChatBadgeCount badgeCount = findViewById(R.id.badgecount);
    badgeCount.messageCount.setCount(conversation.getUnreadMessageCount());
    ```
  </Tab>
</Tabs>

#### **Common Feature**

The CometChatBadgeCount component provides different attributes and methods to control the behavior and appearance of the BadgeCount view.

The attribute `app: count` can also be used with DataBinding

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    /// example with conversation object
        
        <com.cometchat.pro.uikit.ui_components.shared.cometchatBadgeCount.CometChatBadgeCount
                    android:id="@+id/messageCount"
                    android:layout_width="wrap_content"
                    app:count="@{conversation.unreadMessageCount}"
                    android:layout_height="wrap_content"/>
    ```
  </Tab>
</Tabs>

| CometChatBadgeCount field element | Relevant attributes/methods                                                             |
| --------------------------------- | --------------------------------------------------------------------------------------- |
| Count                             | app:count<br />**Method**<br />- setCount(int)                                          |
| Count Size                        | app:count\_size<br />**Method**<br />- setCountSize(float)                              |
| Count Background Color            | app:count\_background\_color<br />**Method**<br />- setCountBackground(@ColorRes color) |
| Count Color                       | app:count\_color<br />**Method**<br />- setCountSize(float)                             |

***

### **CometChatUsers**

The `CometChatUsers` is custom **RecyclerView** which helps to display a list of users present in your CometChat app.

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/Gp90C5sdVtuRR4t7/images/86113eed-users-203c3bd4399cfd1d8be34b95c061cd14.jpg?fit=max&auto=format&n=Gp90C5sdVtuRR4t7&q=85&s=bc56b52dd76ec09e724ef5948f939ba7" width="1440" height="3120" data-path="images/86113eed-users-203c3bd4399cfd1d8be34b95c061cd14.jpg" />
</Frame>

<Note>
  Note about CometChatUsers using with DataBinding:

  Your project should have DataBinding enabled. You can use `CometChatUsers` using DataBinding in the following manner
</Note>

In your `layout.xml` add the following code :

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <data>
                <import type="androidx.recyclerview.widget.LinearLayoutManager"/>
                <import type="androidx.databinding.ObservableList"/>
                <import type="com.cometchat.pro.models.User"/>
        
                <variable
                    name="userList"
                    type="ObservableList<User>" />
        
            </data>
        
            <com.cometchat.pro.uikit.ui_components.shared.cometchatUsers.CometChatUsers
                android:id="@+id/cometchatUsers"
                android:layout_width="match_parent"
                app:userlist="@{userList}"
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" 
                android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment add the following code

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    ObservableArrayList<User> userList=new ObservableArrayList<>();
    binding.setUserList(userList);
    ```
  </Tab>
</Tabs>

For getting the list of users you can use `UsersRequestBuilder()`. Visit the below link for more details on how to retrieve a list of users.

`Documentation` [Retrive Users -Learn how to fetch various types of users.](/sdk/android/2.0/retrieve-users)

In `onSuccess` of the `fetchNext` method you can set the data the `ObservableArrayList` you have created. The advantage of using the `ObservableArrayList` is one doesn't have to manually set the data on `binding.setUserList(userList);` every time you get a new set of data.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    usersRequest.fetchNext(new CometChat.CallbackListener<List<User>>() {
          @Override
        public void onSuccess(List <User> list) {
          Log.d(TAG, "User list received: " + list.size());
              userList.addAll(list);
            //update the ObservableArrayList here 
          }
        @Override
        public void onError(CometChatException e) {
         Log.d(TAG, "User list fetching failed with exception: " + e.getMessage());
          }
        });
    ```
  </Tab>
</Tabs>

<Note>
  Note About CometChatUsers Without DataBinding

  If you are not using DataBinding in your project you can use the `CometChatUser` in the following manner.
</Note>

In your `layout.xml` add the following code

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatUsers.CometChatUsers
          android:id="@+id/cometchatUsers"
          android:layout_width="match_parent"    
          app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" 
          android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    CometChatUsers cometChatUsers=findViewById(R.id.cometchatUsers);
    cometChatUsers.setUserList(list);
        // list: fetched using the UsersRequestBuilder
    // list: fetched using the UsersRequestBuilder
    ```
  </Tab>
</Tabs>

To get the list of users you can use UsersRequestBuilder(). Visit the link below for more details on [Retrieve Users](/sdk/android/2.0/retrieve-users)

<Note>
  Note About Using setItemClickListener

  For getting the click event of `CometChatUsers` you can make use of `setItemClickListener` class.
</Note>

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    cometChatUsers.setItemClickListener(new OnItemClickListener<User>() {

                @Override
                public void OnItemClick(User var, int position) {
                    
                }

                @Override
                public void OnItemLongClick(User var, int position) {
                    super.OnItemLongClick(var, position);
                }
            });
    ```
  </Tab>
</Tabs>

#### **Common Usage**

The `CometChatUsers` component provides different properties to control the behavior of `CometChatUsers` view.

| CometChatUsers field elements | Relevant attributes/methods |
| ----------------------------- | --------------------------- |
| Update List                   | `- setUserList(List<User>)` |
| Update                        | `- update (User)`           |
| Remove                        | `- remove(String)`          |
| Add                           | `- add(User)`               |

***

### **CometChatGroups**

The `CometChatGroups` is a custom **RecyclerView** that helps you to display a list of groups.

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/_MYSdWhXnUkTkjEH/images/4c23777e-groups_last-8c598dd4200bdd050bb1b3b2effb2271.jpg?fit=max&auto=format&n=_MYSdWhXnUkTkjEH&q=85&s=f3c5c5c71b069abdd3a43bfcfef64b6c" width="1440" height="3120" data-path="images/4c23777e-groups_last-8c598dd4200bdd050bb1b3b2effb2271.jpg" />
</Frame>

***

<Note>
  Note About CometChatGroups Using With DataBinding

  If you are using DataBinding in your project you can use the `CometChatGroups` in the following manner.
</Note>

In your `layout.xml` add the following code snippet

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <data>
        
                <import type="androidx.recyclerview.widget.LinearLayoutManager"/>
                <import type="androidx.databinding.ObservableList"/>
                <import type="com.cometchat.pro.models.Group"/>
        
                <variable
                    name="groupList"
                    type="ObservableList<Group>" />
        
            </data>
        
            <com.cometchat.pro.uikit.ui_components.shared.cometchatGroups.CometChatGroups
                android:id="@+id/cometchatGroupList"
                android:layout_width="match_parent"
                app:grouplist="@{groupList}"
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment .

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    ObservableArrayList<Group> groupList=new ObservableArrayList<>();
    binding.setGroupList(groupList);
    ```
  </Tab>
</Tabs>

For getting the list of groups you can use `GroupsRequestBuilder()`.Visit the below link for more details on how to retrieve a list of group.

`Documentation`[Retrive Groups -Learn how to fetch various types of groups.](/sdk/android/2.0/retrieve-groups)

In `onSuccess` of the `fetchNext` method you can set the data the `ObservableArrayList` you have created. The advantage of using the `ObservableArrayList` is one doesn't have to manually set the data on `binding.setGroupList(groupList);` every time you get a new set of data.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    groupsRequest.fetchNext(new CometChat.CallbackListener<List<Group>>() {
          @Override
          public void onSuccess(List <Group> list) {
            Log.d(TAG, "Groups list fetched successfully: " + list.size());
                groupList.addAll(list);
             // update the ObservableArrayList here
        
          }
          @Override
          public void onError(CometChatException e) {
            Log.d(TAG, "Groups list fetching failed with exception: " + e.getMessage());
          }
        });
    ```
  </Tab>
</Tabs>

<Note>
  Note About CometChatGroups Without DataBinding

  If you are not using DataBinding in your project you can use the `CometChatGroups` in the following manner.
</Note>

In your `layout.xml` add the following code

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatGroups.CometChatGroups
                android:id="@+id/cometchatGroups"
                android:layout_width="match_parent"
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    CometChatGroups cometChatGroups = findViewById(R.id.cometchatGroups);
    cometChatGroups.setGroupList(list);
        // list: fetched using the GroupsRequestBuilder
    ```
  </Tab>
</Tabs>

You can refer to how to [Retrieve Groups](/sdk/android/2.0/retrieve-groups).

<Note>
  Note About Using setItemClickListener

  For getting the click event of `CometChatGroups` you can make use of `setItemClickListener` class.
</Note>

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    cometChatGroups.setItemClickListener(new OnItemClickListener<Group>() {
                @Override
                public void OnItemClick(Group var, int position) {

                }

                @Override
                public void OnItemLongClick(Group var, int position) {
                    super.OnItemLongClick(var, position);
                }
            });
    ```
  </Tab>
</Tabs>

#### **Common Usage**

The `CometChatGroupList` component provides different properties to control the behavior of `CometChatGroupList` view. You can perform different operations like an update, remove, add, etc.

| CometChatGroups field elements | Relevant attributes/methods   |
| ------------------------------ | ----------------------------- |
| Update List                    | `- setGroupList(List<Group>)` |
| Update                         | `- update (Group)`            |
| Remove                         | `- remove(String)`            |
| Add                            | `- add(Group)`                |

***

### **CometChatConversations**

`CometChatConversations` is a custom **RecyclerView** which will help you to display a list of all the users and groups in which the logged-in user has made any conversation.

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/7emVxEQ5MCxvzC60/images/1e01bbda-convo-1e6edc0cd162671904900432ce5383e6.jpg?fit=max&auto=format&n=7emVxEQ5MCxvzC60&q=85&s=c4b8754b6bd73dca97513fbfff672f55" width="1440" height="3120" data-path="images/1e01bbda-convo-1e6edc0cd162671904900432ce5383e6.jpg" />
</Frame>

<Note>
  Note about CometChatConversations using with DataBinding

  If you are using DataBinding in your project you can use the `CometChatConversations` in the following manner.
</Note>

In your `layout.xml` add the following code.

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <data>
        
                <import type="androidx.recyclerview.widget.LinearLayoutManager"/>
                <import type="androidx.databinding.ObservableList"/>
                <import type="com.cometchat.pro.models.Conversation"/>
        
                <variable
                    name="conversationList"
                    type="ObservableList<Conversation>" />
        
            </data>
        
            <com.cometchat.pro.uikit.ui_components.shared.cometchatConversations.CometChatConversations
                android:id="@+id/cometchatConversationList"
                android:layout_width="match_parent"
                app:conversationlist="@{conversationList}"
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    ObservableArrayList<Conversation> conversationList=new ObservableArrayList<>();
    binding.setConversationList(conversationList);
    ```
  </Tab>
</Tabs>

For getting the list of conversation you can use `ConversationsRequestBuilder()` .visit the below link for more details on how to retrieve a list of conversation

`Documentation` [Retrive Conversations -Learn how to build a recent chats list using conversations.](/sdk/android/2.0/retrieve-conversations)

In `onSuccess` of the `fetchNext` method you can set the data the `ObservableArrayList` you have created. The advantage of using the `ObservableArrayList` is one doesn't have to manually set the data on `binding.setConversationList(conversationList);` every time you get a new set of data.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    conversationsRequest.fetchNext(new CometChat.CallbackListener<List<Conversation>>() {
      @Override
        public void onSuccess(List<Conversation> conversations) {
           // Handle list of conversations
            conversationList.addAll(conversations); 
        // update ObservableArrayList list here
      }

      @Override
        public void onError(CometChatException e) {
        // Handle failure
      }
    });
    ```
  </Tab>
</Tabs>

<Note>
  Note About CometChatConversations Without DataBinding

  If you are not using DataBinding in your project you can use the `CometChatConversations` in the following manner.
</Note>

In your `layout.xml` add the following code

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatConversations.CometChatConversations
                android:id="@+id/cometchatConversations"
                android:layout_width="match_parent"     
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    CometChatConversations cometChatConversations = findViewById(R.id.cometchatConversations);
    cometChatConversationList.setConversationList(conversations);
        // list: fetched using the ConversationsRequestBuilder
    ```
  </Tab>
</Tabs>

In `onSuccess` of the `fetchNext` method of `ConversationsRequestBuilder`, you can set the data. You can refer how to [Retrieve Conversations](/sdk/android/2.0/retrieve-conversations)

<Note>
  Note About Using setItemClickListener

  For getting the click event of `CometChatConversations` you can make use of the `ConversationItemClickListener` class.
</Note>

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    cometChatConversations.setItemClickListener(new OnItemClickListener<Conversation>() {
                @Override
                public void OnItemClick(Conversation var, int position) {

                }

                @Override
                public void OnItemLongClick(Conversation var, int position) {
                    super.OnItemLongClick(var, position);
                }
            });
    ```
  </Tab>
</Tabs>

#### **Common Usage**

The `CometChatConversations` component provides different properties to control the behavior of the `CometChatConversations` view. You can perform different operations like an update, remove, add, etc

| CometChatConversations field elements | Relevant attributes/methods                 |
| ------------------------------------- | ------------------------------------------- |
| Update List                           | `- setConversationList(List<Conversation>)` |
| Update                                | `- update (Conversation)`                   |
| Remove                                | `- remove(Conversation)`                    |
| Add                                   | `# add(Conversation)`                       |

***

### **CometChatCalls**

`CometChatCalls` is custom **RecyclerView** which will help you to display list of calls.

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/PrOf0fpV33FkfOMB/images/131d1c30-calls-8e95c2b094678f21eff081b269904ddf.jpg?fit=max&auto=format&n=PrOf0fpV33FkfOMB&q=85&s=ed541766ed64ebeea57ad860d952549c" width="1080" height="2340" data-path="images/131d1c30-calls-8e95c2b094678f21eff081b269904ddf.jpg" />
</Frame>

You can use the `CometChatCalls` in the following manner.

In your `layout.xml` add the following code :

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatCalls.CometChatCalls
            android:id="@+id/cometchatCalls"
            android:layout_width="match_parent"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    CometChatCalls cometChatCalls = findViewById(R.id.cometchatCallList);
    ```
  </Tab>
</Tabs>

In `onSuccess` of the `fetchNext` method of `MessagesRequestBuilder` you can set the data. You need to add `setCategory(CometChatConstants.CATEGORY_CALL)` in your `MessagesRequestBuilder` to fetch only call messages

You can refer an **example here.**

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    if (messagesRequest == null)
    {
        messagesRequest = new MessagesRequest.MessagesRequestBuilder().setCategory(CometChatConstants.CATEGORY_CALL).setLimit(30).build();
    }
    messagesRequest.fetchPrevious(new CometChat.CallbackListener<List<BaseMessage>>() {
      @Override
      public void onSuccess(List<BaseMessage> baseMessages) {
        /*Since the call list received like messages i.e top with older and 
        bottom with the latest message. We will reverse the list */
        Collections.reverse(baseMessages);
        cometCallList.setCallList(baseMessages);
      }
      @Override
        public void onError(CometChatException e) {
        //Error Message 
      });
    ```
  </Tab>
</Tabs>

<Note>
  Note About Using CallItemClickListener:

  For getting the click event of `CometChatCalls` you can make use of `ItemClickListener` class.
</Note>

There are two events given by `CometChatCalls`.

This event is performed when clicking on the User or Group item displayed in the call list.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    cometChatCalls.setItemClickListener(new OnItemClickListener<Call>() {
            @Override
            public void OnItemClick(Call var, int position) {
              // perform your action here
          	}
    });
    ```
  </Tab>
</Tabs>

This event is performed when click on call icon visible after each Group or User item in call list.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    cometChatCalls.setItemCallClickListener(new OnItemClickListener<Call>() {
           @Override
           public void OnItemClick(Call var, int position) {
                            // perform your action here
           }
    });
    ```
  </Tab>
</Tabs>

#### **Common Usage:**

The `CometChatCallList` component provides different properties to control the behavior of the `CometChatCallList` view. You can perform different operations like an update, remove.

| CometChatCalls field e | Relevant attributes/methods |
| ---------------------- | --------------------------- |
| Update List            | setCallList(List\<Call>)    |
| Update                 | update(Call)                |
| Remove                 | remove(Call)                |
