Message Center message view
Show a single Message Center message using the MessageCenterMessage composable in Jetpack Compose or the MessageCenterMessageFragment in XML Views.
The message view shows a single Message Center message. Use it alongside your own list view, or to deep link directly to a message.
Jetpack Compose
Two composables are available. MessageCenterMessageScreen includes a top bar with a delete action. MessageCenterMessage provides only the message content, so you supply the top bar.
Show a message
import com.urbanairship.messagecenter.compose.ui.MessageCenterMessageScreen
import com.urbanairship.messagecenter.compose.ui.rememberMessageCenterMessageState
import com.urbanairship.messagecenter.compose.ui.theme.MessageCenterTheme
@Composable
fun MyMessageScreen(messageId: String, onClose: () -> Unit) {
val state = rememberMessageCenterMessageState(messageId = messageId)
MessageCenterTheme {
MessageCenterMessageScreen(
state = state,
onClose = onClose
)
}
}@Composable
public fun MessageCenterMessageScreen(
modifier: Modifier = Modifier,
state: MessageCenterMessageState = rememberMessageCenterMessageState(),
topBar: @Composable ((title: String?, scrollBehavior: TopAppBarScrollBehavior, onNavigateUp: () -> Unit) -> Unit)? = null,
onNavigateUp: () -> Unit = { },
onClose: () -> Unit = { }
)@Composable
public fun MessageCenterMessage(
state: MessageCenterMessageState,
modifier: Modifier = Modifier,
onClose: () -> Unit,
)onClose: Called when the message is closed.MessageCenterMessageScreenalso uses it as the delete callback.topBar: An optional top bar. When null,MessageCenterMessageScreenuses a default top bar with a delete action, which respects thecanDeleteMessagestheme option.
Set the message to display through the state. Update messageId to load a different message:
val state = rememberMessageCenterMessageState()
state.messageId = messageIdXML Views
Subclass MessageCenterMessageFragment and set an onMessageDeletedListener to handle deletion. This example uses Jetpack Navigation, but any navigation method works.
class CustomMessageFragment : MessageCenterMessageFragment(R.layout.fragment_inbox_message) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
toolbar?.run {
inflateMenu(messageCenterR.menu.ua_message_center_message_pane_menu)
setupWithNavController(this, findNavController(view))
}
onMessageDeletedListener = OnMessageDeletedListener { message ->
// Navigate back to the list after deletion
findNavController().popBackStack()
}
}
}Create the fragment with newInstance, passing the message ID and, optionally, a title to show until the message loads:
Create MessageCenterMessageFragment
val fragment = MessageCenterMessageFragment.newInstance(messageId, messageTitle)MessageCenterMessageFragment fragment =
MessageCenterMessageFragment.newInstance(messageId, messageTitle);Embed the fragment with a FragmentContainerView or through the FragmentManager, then handle display requests to navigate to it instead of letting the SDK launch its own activity.