context.startActivity(MessageListActivity.createIntent(context, cid = "messaging:123"))Message List Screen
You can set up a self-contained chat screen that displays a list of messages and gives users the ability to send messages by using one of the following components:
MessageListFragment: A Fragment that represents a self-contained chat screen.MessageListActivity: An Activity that is just a thin wrapper aroundMessageListFragment.
The MessageListFragment contains these three inner components:
MessageListHeaderView: Displays a navigation icon, the name of the channel or thread and the channel avatar.MessageListView: Shows a list of paginated messages, with threads, replies, reactions and deleted messages.MessageComposerView: Allows users to participate in the chat by sending messages and attachments.
Fragments and Activities representing self-contained screens are easy to use. They allow you to explore the features of our SDK in a breeze, however, they offer limited customization.
Usage
To use the message list screen, you can simply start MessageListActivity from the SDK:
context.startActivity(MessageListActivity.createIntent(context, "messaging:123"));This single line of code will produce a fully working solution, as shown in the image below.
![]()  | 
|---|
Alternatively, you can achieve the same result by adding MessageListFragment from the SDK to your Fragment or Activity:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />class MyMessageListActivity : AppCompatActivity(R.layout.fragment_container) {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (savedInstanceState == null) {
            val fragment = MessageListFragment.newInstance(cid = "messaging:123") {
                showHeader(true)
            }
            supportFragmentManager.beginTransaction()
                .replace(R.id.container, fragment)
                .commit()
        }
    }
}public final class MyMessageListActivity extends AppCompatActivity {
    public MyMessageListActivity() {
        super(R.layout.fragment_container);
    }
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState == null) {
            MessageListFragment fragment  = MessageListFragment.newInstance("messaging:123", builder -> {
                builder.showHeader(true);
                return Unit.INSTANCE;
            });
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.container, fragment)
                    .commit();
        }
    }
}Next, let’s see how to handle actions on the screen.
Handling Actions
To handle actions supported by MessageListFragment you have to implement corresponding click listeners in the parent Fragment or Activity:
class MyMessageListActivity : AppCompatActivity(R.layout.fragment_container), MessageListFragment.BackPressListener {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // Add MessageListFragment to the layout
    }
    override fun onBackPress() {
        // Handle back press
    }
}public final class MyMessageListActivity extends AppCompatActivity implements MessageListFragment.BackPressListener {
    public MyMessageListActivity() {
        super(R.layout.fragment_container);
    }
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Add MessageListFragment to the layout
    }
    @Override
    public void onBackPress() {
        // Handle back press
    }
}Currently, there’s only a single click listener you can use with the MessageListFragment:
BackPressListener: Click listener for the navigation button in the header. Finishes Activity by default.
Customization
The message list screen component offers limited customization. The MessageListFragment exposes a builder with the following methods:
setFragment: Sets custom message list Fragment. The Fragment must be a subclass ofMessageListFragment.customTheme: Custom theme for the screen.showHeader: Whether the header is shown or hidden.messageId: The ID of the message to highlight.
Other than that, you can use inheritance for further customization as shown in the example below:
class CustomMessageListFragment : MessageListFragment() {
    override fun setupMessageListHeader(messageListHeaderView: MessageListHeaderView) {
        super.setupMessageListHeader(messageListHeaderView)
        // Customize message list header view
        // For example, set a custom listener for the back button
        messageListHeaderView.setBackButtonClickListener {
            // Handle back press
        }
    }
    override fun setupMessageList(messageListView: MessageListView) {
        super.setupMessageList(messageListView)
        // Customize message list view
    }
    override fun setupMessageComposer(messageComposerView: MessageComposerView) {
        super.setupMessageComposer(messageComposerView)
        // Customize message composer view
    }
}
class CustomMessageListActivity : MessageListActivity() {
    override fun createMessageListFragment(cid: String, messageId: String?): MessageListFragment {
        return MessageListFragment.newInstance(cid) {
            setFragment(CustomMessageListFragment())
            customTheme(R.style.StreamUiTheme)
            showHeader(true)
            messageId(messageId)
        }
    }
}public final class CustomMessageListFragment extends MessageListFragment {
    @Override
    protected void setupMessageListHeader(@NonNull MessageListHeaderView messageListHeaderView) {
        super.setupMessageListHeader(messageListHeaderView);
        // Customize message list header view
        // For example, set a custom listener for the back button
        messageListHeaderView.setBackButtonClickListener(() -> {
            // Handle back press
        });
    }
    @Override
    protected void setupMessageList(@NonNull MessageListView messageListView) {
        super.setupMessageList(messageListView);
        // Customize message list view
    }
    @Override
    protected void setupMessageComposer(@NonNull MessageComposerView messageComposerView) {
        super.setupMessageComposer(messageComposerView);
        // Customize message composer view
    }
}
public final class CustomMessageListActivity extends MessageListActivity {
    @NonNull
    @Override
    protected MessageListFragment createMessageListFragment(@NonNull String cid, @Nullable String messageId) {
        return MessageListFragment.newInstance(cid, builder -> {
            builder.setFragment(new CustomMessageListFragment());
            builder.customTheme(R.style.StreamUiTheme);
            builder.showHeader(true);
            builder.messageId(messageId);
            return Unit.INSTANCE;
        });
    }
}Then you need to add CustomMessageListActivity to your AndroidManifest.xml, create an Intent for it using the MessageListActivity.createIntent() method, and finally start the Activity:
context.startActivity(
    MessageListActivity.createIntent(
        context = context,
        cid = "messaging:123",
        activityClass = CustomMessageListActivity::class.java
    )
)context.startActivity(MessageListActivity.createIntent(context, "messaging:123", null, CustomMessageListActivity.class));Fragments and Activities representing self-contained screens can be styled using the options described in the theming guide.
