[*]Integrate Jetpack Compose UI into a legacy XML-based Project.
Handle Dark Theme и локализация из родительского модуля (Legacy). родитель.
Код: Выделить всё
ExpenseTrackerManager
Код: Выделить всё
**ExpenseTrackerManager.kt**
object ExpenseTrackerManager {
var isDarkMode: Boolean = false
var transactionDetailsData: ((TransactionReportData) -> Unit)? = null
var onBackPress: (() -> Unit)? = null
var sessionExpiredData: ((String) -> Unit)? = null
fun initialize(
darkMode: Boolean,
transactionDetailsView: (TransactionReportData) -> Unit,
onBackPress: () -> Unit,
sessionExpired: (String) -> Unit,
) {
this.isDarkMode = darkMode
this.transactionDetailsData = transactionDetailsView
this.onBackPress = onBackPress
this.sessionExpiredData = sessionExpired
}
@Composable
fun Start() {
ExpenseTrackerSDKEntryPoint()
}
}
**ExpenseTrackerSDKEntryPoint.kt**
@Composable
fun ExpenseTrackerSDKEntryPoint() {
GlobalTheme {
HubMenuNavGraph()
}
}
**HubMenuNavGraph.kt**
@Composable
fun HubMenuNavGraph() {
val navController = rememberNavController()
val viewModel: MonthlySpendingViewModel = viewModel()
NavHost(navController = navController, startDestination = Screen.PFMScreen.route) {
pfmScreenRoute(
onNavigateToCreateMonthlyBudget = {
navController.navigate(Screen.CreateBudgetScreen.route)
},
onNavigateToSpendingViewAll = {
navController.navigate(Screen.MonthlySpendingScreen.route)
},
onNavigateToCurrentBudget = {
navController.navigate(Screen.MonthlyCurrentBudgetScreen.route)
},
onNavUp = {
ExpenseTrackerManager.onBackPress?.invoke()
},
onSessionExpired = {
ExpenseTrackerManager.sessionExpiredData?.invoke(it)
}
)
}
}
< /code>
Затем в фрагменте устаревшего: < /p>
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
ExpenseTrackerManager.initialize(
darkMode = false,
transactionDetailsView = { fetchRequiredItemFromTransactionList(it) },
onBackPress = { activity?.finish() },
sessionExpired = { message -> unAutDialog(message) }
)
return ComposeView(requireContext()).apply {
layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
setContent {
ExpenseTrackerManager.Start()
}
}
}
, пока я выполнил эту работу и обработал варианты использования, я не уверен, является ли это чистый и масштабируемый подход или если есть лучшие практики. Legacy и Sompose Modules?
заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/796 ... xml-activi