Как сохранить текстовые данные, которые вводит пользователь в Android?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Гость
 Как сохранить текстовые данные, которые вводит пользователь в Android?

Сообщение Гость »

Я создал приложение, которое отображает список коз с основной информацией, такой как имя, возраст, порода и дополнительной информацией (необязательно). Пользователь может запустить диалоговое окно для каждой козы и ввести текст имени, возраста, породы и дополнительную информацию. Также можно ввести изображение с помощью библиотеки катушек.
Как сохранить данные, которые пользователь вводит для каждого козла, чтобы они отображались при следующем запуске приложения?
Я новичок в этом и не имею опыта сохранения данных.
Вот код:
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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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