Мой подход хорошей практикой? Интеграция JetPack Compose в устаревшем проекте XML/Activity с использованием модульной арAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Мой подход хорошей практикой? Интеграция JetPack Compose в устаревшем проекте XML/Activity с использованием модульной ар

Сообщение Anonymous »

В настоящее время я работаю над мигрирующим частями устаревшего проекта Android (построенный с XML и мероприятиями) в JetPack Compose. Чтобы не смешивать компоновку с существующим устаревшим кодом напрямую, я решил пойти с модульной архитектурой . Specifically, I created a Jetpack Compose-based feature module as a library, which I then integrate into the legacy codebase (Activity/Fragment/XML).
✅ Goals:

[*]Integrate Jetpack Compose UI into a legacy XML-based Project.
Handle Dark Theme и локализация из родительского модуля (Legacy). родитель.

Код: Выделить всё

ExpenseTrackerManager
) в модуле Compose для облегчения связи между наследием и составными модулями. Вот упрощенная версия: < /p>

Код: Выделить всё

**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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»