Я создал приложение, которое отображает список коз с основной информацией, такой как имя, возраст, порода и дополнительной информацией (необязательно). Пользователь может запустить диалоговое окно для каждой козы и ввести текст имени, возраста, породы и дополнительную информацию. Также можно ввести изображение с помощью библиотеки катушек.
Как сохранить данные, которые пользователь вводит для каждого козла, чтобы они отображались при следующем запуске приложения?
Я новичок в этом и не имею опыта сохранения данных.
Вот код:
class MainActivity : ComponentActivity() {
//private val viewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
GoatsTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
GoatsApp(viewModel = MainViewModel())
}
}
}
}
}
@Composable
fun GoatsApp(viewModel: MainViewModel) {
var goats: MutableList = remember {
mutableStateListOf(
Goats(R.string.red, R.string.alpine, 7),
Goats(R.string.little_goat, R.string.alpine, 8),
Goats(R.string.nana, R.string.alpine, 7),
Goats(R.string.sharkie, R.string.alpine, 10)
)
}
var bucks: MutableList = remember { mutableStateListOf(
Goats(R.string.billy, R.string.mix, 7)
) }
var isButtonClicked by mutableStateOf(false)
val provider = GoogleFont.Provider(
providerAuthority = "com.google.android.gms.fonts",
providerPackage = "com.google.android.gms",
certificates = R.array.com_google_android_gms_fonts_certs
)
val fontName = GoogleFont("Lato")
val fontFamily = FontFamily(
Font(googleFont = fontName, fontProvider = provider)
)
Column(modifier = Modifier
.padding(16.dp)
.fillMaxHeight(0.90f)) {
Row(
modifier = Modifier
.fillMaxWidth(0.95f)
.border(3.dp, Color.Gray, RoundedCornerShape(13.dp))
) {
Button(
onClick = { goats.add(Goats(R.string.little_goat, R.string.alpine, 9)) },
shape = RoundedCornerShape(10.dp),
modifier = Modifier.background(Color.LightGray)
) {
Text(text = "+")
}
Text(
text = "Does",
modifier = Modifier
.background(color = Color.LightGray)
.fillMaxWidth()
.padding(12.dp),
fontStyle = FontStyle.Italic,
textAlign = TextAlign.Center,
fontFamily = fontFamily,
fontWeight = FontWeight.ExtraLight
)
}
Row {
GoatList(modifier = Modifier.padding(8.dp), goats = goats)
}
Row(
modifier = Modifier
.fillMaxWidth(0.95f)
.border(3.dp, Color.Gray, RoundedCornerShape(13.dp))
) {
Button(
onClick = { bucks.add(Goats(R.string.billy, R.string.mix, 9)) },
shape = RoundedCornerShape(10.dp),
modifier = Modifier.background(Color.LightGray)
) {
Text(text = "+")
}
Text(
text = "Bucks",
modifier = Modifier
.background(color = Color.LightGray)
.fillMaxWidth()
.padding(12.dp),
fontStyle = FontStyle.Italic,
textAlign = TextAlign.Center,
fontFamily = fontFamily,
fontWeight = FontWeight.ExtraLight
)
}
BuckList(modifier = Modifier.padding(8.dp), bucks = bucks)
}
}
@Composable
fun GoatCard(allGoats: Goats, viewModel: MainViewModel) {
//val years = allGoats.age.toString()
var stateAdditional by rememberSaveable { mutableStateOf("Additional Text") }
var stateName by rememberSaveable { mutableStateOf("") }
var stateAge by rememberSaveable { mutableStateOf("") }
val imageUri = rememberSaveable{ mutableStateOf("") }
val myImage = rememberAsyncImagePainter(
imageUri.value.ifEmpty { R.drawable.pexels_anna_shvets_5953826}
)
val launcher = rememberLauncherForActivityResult(contract = ActivityResultContracts.GetContent()) {
uri: Uri? -> uri?.let {imageUri.value = it.toString()}
}
Card(modifier = Modifier) {
Row{
Image(painter = myImage, contentDescription = (stateName),
modifier = Modifier.size(68.dp),
contentScale = ContentScale.Crop)
Column(Modifier.width(120.dp)) {
Text(text = stateName, modifier = Modifier.padding(8.dp),
style = MaterialTheme.typography.titleSmall)
Row{
Text(text = stringResource(allGoats.breed), modifier = Modifier.padding(8.dp), style = MaterialTheme.typography.bodySmall)
Text(stateAge, modifier = Modifier.padding(8.dp), style = MaterialTheme.typography.bodySmall)
Box {
Button(onClick = { viewModel.isGoatClick() },
modifier = Modifier.fillMaxWidth(), colors = ButtonDefaults.buttonColors(Color.LightGray)) { }
Text(text = "More",
style = MaterialTheme.typography.bodySmall,
textAlign = TextAlign.End,
fontWeight = FontWeight.Bold,
modifier = Modifier
.fillMaxWidth()
.padding(end = 6.dp, top = 12.dp))
}
}
if(viewModel.isDialogShown) {
CustomDialog(
onDismiss = { viewModel.onDismissDialog() },
myGoats = Goats(
name = allGoats.name,
age = allGoats.age,
breed = allGoats.breed
),
onValueChange = { stateName = it },
value = stateName,
onAgeValueChange = { stateAge = it },
ageValue = stateAge,
launcher = launcher,
myImage = myImage,
addValue = stateAdditional,
addOnValueChange = { stateAdditional = it },
)
}
}
}
}
}
@Composable
fun GoatList(modifier: Modifier = Modifier,
goats: List) {
LazyVerticalGrid(columns = GridCells.Fixed(1), modifier.padding(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) {
items(goats) { allGoats ->
GoatCard(allGoats = allGoats, viewModel = MainViewModel())
}
}
}
@Composable
fun BuckList(modifier: Modifier = Modifier,
bucks: List) {
LazyVerticalGrid(columns = GridCells.Fixed(1), modifier.padding(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) {
items(bucks) { allGoats ->
GoatCard(allGoats = allGoats, viewModel = MainViewModel())
}
}
}
@Composable
@Preview
fun previewApp() {
GoatsApp(viewModel = MainViewModel())
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... in-android
Как сохранить текстовые данные, которые вводит пользователь в Android? ⇐ Android
Форум для тех, кто программирует под Android
1710418691
Гость
Я создал приложение, которое отображает список коз с основной информацией, такой как имя, возраст, порода и дополнительной информацией (необязательно). Пользователь может запустить диалоговое окно для каждой козы и ввести текст имени, возраста, породы и дополнительную информацию. Также можно ввести изображение с помощью библиотеки катушек.
Как сохранить данные, которые пользователь вводит для каждого козла, чтобы они отображались при следующем запуске приложения?
Я новичок в этом и не имею опыта сохранения данных.
Вот код:
class MainActivity : ComponentActivity() {
//private val viewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
GoatsTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
GoatsApp(viewModel = MainViewModel())
}
}
}
}
}
@Composable
fun GoatsApp(viewModel: MainViewModel) {
var goats: MutableList = remember {
mutableStateListOf(
Goats(R.string.red, R.string.alpine, 7),
Goats(R.string.little_goat, R.string.alpine, 8),
Goats(R.string.nana, R.string.alpine, 7),
Goats(R.string.sharkie, R.string.alpine, 10)
)
}
var bucks: MutableList = remember { mutableStateListOf(
Goats(R.string.billy, R.string.mix, 7)
) }
var isButtonClicked by mutableStateOf(false)
val provider = GoogleFont.Provider(
providerAuthority = "com.google.android.gms.fonts",
providerPackage = "com.google.android.gms",
certificates = R.array.com_google_android_gms_fonts_certs
)
val fontName = GoogleFont("Lato")
val fontFamily = FontFamily(
Font(googleFont = fontName, fontProvider = provider)
)
Column(modifier = Modifier
.padding(16.dp)
.fillMaxHeight(0.90f)) {
Row(
modifier = Modifier
.fillMaxWidth(0.95f)
.border(3.dp, Color.Gray, RoundedCornerShape(13.dp))
) {
Button(
onClick = { goats.add(Goats(R.string.little_goat, R.string.alpine, 9)) },
shape = RoundedCornerShape(10.dp),
modifier = Modifier.background(Color.LightGray)
) {
Text(text = "+")
}
Text(
text = "Does",
modifier = Modifier
.background(color = Color.LightGray)
.fillMaxWidth()
.padding(12.dp),
fontStyle = FontStyle.Italic,
textAlign = TextAlign.Center,
fontFamily = fontFamily,
fontWeight = FontWeight.ExtraLight
)
}
Row {
GoatList(modifier = Modifier.padding(8.dp), goats = goats)
}
Row(
modifier = Modifier
.fillMaxWidth(0.95f)
.border(3.dp, Color.Gray, RoundedCornerShape(13.dp))
) {
Button(
onClick = { bucks.add(Goats(R.string.billy, R.string.mix, 9)) },
shape = RoundedCornerShape(10.dp),
modifier = Modifier.background(Color.LightGray)
) {
Text(text = "+")
}
Text(
text = "Bucks",
modifier = Modifier
.background(color = Color.LightGray)
.fillMaxWidth()
.padding(12.dp),
fontStyle = FontStyle.Italic,
textAlign = TextAlign.Center,
fontFamily = fontFamily,
fontWeight = FontWeight.ExtraLight
)
}
BuckList(modifier = Modifier.padding(8.dp), bucks = bucks)
}
}
@Composable
fun GoatCard(allGoats: Goats, viewModel: MainViewModel) {
//val years = allGoats.age.toString()
var stateAdditional by rememberSaveable { mutableStateOf("Additional Text") }
var stateName by rememberSaveable { mutableStateOf("") }
var stateAge by rememberSaveable { mutableStateOf("") }
val imageUri = rememberSaveable{ mutableStateOf("") }
val myImage = rememberAsyncImagePainter(
imageUri.value.ifEmpty { R.drawable.pexels_anna_shvets_5953826}
)
val launcher = rememberLauncherForActivityResult(contract = ActivityResultContracts.GetContent()) {
uri: Uri? -> uri?.let {imageUri.value = it.toString()}
}
Card(modifier = Modifier) {
Row{
Image(painter = myImage, contentDescription = (stateName),
modifier = Modifier.size(68.dp),
contentScale = ContentScale.Crop)
Column(Modifier.width(120.dp)) {
Text(text = stateName, modifier = Modifier.padding(8.dp),
style = MaterialTheme.typography.titleSmall)
Row{
Text(text = stringResource(allGoats.breed), modifier = Modifier.padding(8.dp), style = MaterialTheme.typography.bodySmall)
Text(stateAge, modifier = Modifier.padding(8.dp), style = MaterialTheme.typography.bodySmall)
Box {
Button(onClick = { viewModel.isGoatClick() },
modifier = Modifier.fillMaxWidth(), colors = ButtonDefaults.buttonColors(Color.LightGray)) { }
Text(text = "More",
style = MaterialTheme.typography.bodySmall,
textAlign = TextAlign.End,
fontWeight = FontWeight.Bold,
modifier = Modifier
.fillMaxWidth()
.padding(end = 6.dp, top = 12.dp))
}
}
if(viewModel.isDialogShown) {
CustomDialog(
onDismiss = { viewModel.onDismissDialog() },
myGoats = Goats(
name = allGoats.name,
age = allGoats.age,
breed = allGoats.breed
),
onValueChange = { stateName = it },
value = stateName,
onAgeValueChange = { stateAge = it },
ageValue = stateAge,
launcher = launcher,
myImage = myImage,
addValue = stateAdditional,
addOnValueChange = { stateAdditional = it },
)
}
}
}
}
}
@Composable
fun GoatList(modifier: Modifier = Modifier,
goats: List) {
LazyVerticalGrid(columns = GridCells.Fixed(1), modifier.padding(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) {
items(goats) { allGoats ->
GoatCard(allGoats = allGoats, viewModel = MainViewModel())
}
}
}
@Composable
fun BuckList(modifier: Modifier = Modifier,
bucks: List) {
LazyVerticalGrid(columns = GridCells.Fixed(1), modifier.padding(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) {
items(bucks) { allGoats ->
GoatCard(allGoats = allGoats, viewModel = MainViewModel())
}
}
}
@Composable
@Preview
fun previewApp() {
GoatsApp(viewModel = MainViewModel())
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78160446/how-to-save-text-data-the-user-enters-in-android[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия