Я пытаюсь достичь следующего: у меня есть компонуемый функция, которая просто отображает элементы списка. Список обновляется другими функциями приложения, и, конечно, он есть в моем состоянии пользовательского интерфейса. Сейчас я просто пытаюсь реализовать кнопку, позволяющую пользователю экспортировать (загружать) этот список в формате CSV. Я начал с ознакомления с официальной документацией о том, как создать файл в общем хранилище, но вскоре понял, что в примерах используется startActivityForResult, который устарел в пользу RegisterForActivityResult. Однако я все еще не понимаю, как реализовать желаемую загрузку CSV.
Сначала я добавил ActivityResultLauncher в свой MainActivity.kt и инициализировал его в onCreate метод:
Код: Выделить всё
class MainActivity : ComponentActivity() {
private lateinit var createDocumentLauncher: ActivityResultLauncher
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Initialize launcher
createDocumentLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
result.data?.data?.let { uri ->
// Perform operations on the document using its URI
}
}
}
setContent {
// Omit...
}
}
}
Теперь у меня есть кнопка «Экспорт в CSV», которая вызывает функцию экспорта в моей ViewModel сорт. Насколько я знаю, эта функция должна просто создать намерение и запустить средство выбора файлов:
Код: Выделить всё
fun exportListToCsv() {
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "text/csv"
putExtra(Intent.EXTRA_TITLE, "my_list_in_csv.csv")
}
createDocumentLauncher.launch(intent)
}
Я надеюсь, что кто-нибудь сможет дать какие-либо рекомендации о том, как добиться желаемое поведение в моем приложении. У меня такое ощущение, что я делаю что-то в корне неправильное, но не знаю, что именно. Все примеры кода, которые я нашел, совершенно бесполезны, но это по-прежнему выглядит как очень простая функциональность приложения, поэтому я подумал, что это должно быть довольно просто. Пожалуйста, имейте в виду, что очень важно, чтобы я по-прежнему следовал рекомендуемой современной архитектуре. Кто-нибудь имеет опыт в этом? Заранее большое спасибо, ребята
Подробнее здесь: https://stackoverflow.com/questions/792 ... ndroid-app
Мобильная версия