Я пытался сделать приложение для заметок с базой данных комнаты и рукоятью кинжала. Все работало отлично, пока я не перешел к передаче аргументов с главного экрана на экран заметок, используя навигацию при составлении, где пользователь может редактировать текст и обновлять его. Но по какой-то причине аргументы не передаются правильно в textFields.
Думая, что проблема связана с комнатой или рукоятью, я упростил проект, попытавшись передать две строки в два разных текстовых поля на экране заметки, но проблема не устранена. Когда я передал «примечание» и «контент» двум текстовым полям на экране заметок, первое текстовое поле, которое должно получить «примечание», просто отображает значение по умолчанию из navArgument в NavGraph, а второе отображает это {note_content}notecontent. похоже, что второй texField получает оба аргумента. Это мой код. пожалуйста, помогите
Основное действие и главный экран
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
NavigationTutsProjectTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
Navigation()
}
}
}
}
}
@Composable
fun HomeScreen(navController: NavController){
val textTitle = "note"
val textContent = "content"
Column(
modifier = Modifier
.fillMaxSize()
.clickable {
navController.navigate(Screen.NoteScreen.route+textTitle+textContent)
},
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(text = textTitle)
Text(text = textContent)
}
}
Маршруты для Home и NoteScreen с аргументами
sealed class Screen(val route: String){
object HomeScreen: Screen("home_screen")
object NoteScreen: Screen("note_screen?note_title = {note_title}¬e_content = {note_content}")
}
Навигационная система
@Composable
fun Navigation(){
val navController = rememberNavController()
NavHost(navController = navController, startDestination = Screen.HomeScreen.route){
composable(route = Screen.HomeScreen.route){
HomeScreen(navController)
}
composable(
route =Screen.NoteScreen.route,
arguments = listOf(
navArgument("note_title"){
type = NavType.StringType
defaultValue = "Nothing"
},
navArgument("note_title"){
type = NavType.StringType
defaultValue = "Nothing"
}
)
){entry->
NoteScreen(
noteTitle = entry.arguments?.getString("note_title"),
noteContent = entry.arguments?.getString("note_content")
)
}
}
}
Экран заметок
@Composable
fun NoteScreen(
noteTitle: String?,
noteContent: String?
){
var textFieldTitle by remember {
mutableStateOf(noteTitle)
}
var textFieldContent by remember {
mutableStateOf(noteContent)
}
Column(
modifier = Modifier
.fillMaxSize()
) {
textFieldTitle?.let {
TextField(
value = it, onValueChange = {it2->
textFieldTitle = it2
}
)
}
textFieldContent?.let {
TextField(
value = it, onValueChange = {it2->
textFieldContent = it2
}
)
}
}
}
Вот что я получаю, когда запускаю код
да, это то, что я пытался сделать. как заставить его работать?
Пытаться
Screen.NoteScreen.route.replace("{note_title}",textTitle).replace("{note_content}" ,textContent)
вместо
Screen.NoteScreen.route+textTitle+textContent
Ваш код
Screen.NoteScreen.route+textTitle+textContent
просто объединяет строки вместе. Вы ожидали, что+
заменит{note_title}
вашей переменнойtextTitle
и{note_content}
вашей переменнойtextContent
? Это не то, что делает+
.