Я работаю над приложением JetPack Compose, где у меня есть Lazycolumn, отображающий список предметов. Каждый элемент обернут на поверхность с помощью кликабельного модификатора, но нажатие на элементы, кажется, не работает. Я добавил журналы отладки, и появляется, что функция Clickable никогда не вводится - нет журналов, когда я нажимаю на элементы. < /P>
Вот мой код: < /p>
import android.util.Log
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import com.example.namecheap_training.model.Product
@Composable
fun ProductListScreen(productList: List) {
LazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(20.dp)
) {
items(productList.size) { index ->
ProductItem(
product = productList[index],
onProductClick = {
Log.d("ProductListScreen", "Product clicked: ${productList[index].name}")
}
)
}
}
}
@Composable
fun ProductItem(
product: Product,
onProductClick: () -> Unit
) {
var isClicked by remember { mutableStateOf(false) }
Surface(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp)
.clickable {
isClicked = !isClicked // Toggle the clicked state
Log.d("ProductItem", "isClicked toggled to: $isClicked")
onProductClick() // Trigger the passed click action
},
color = if (isClicked) Color.Yellow else Color.LightGray
) {
Row(
modifier = Modifier
.padding(16.dp)
) {
Text(text = product.name)
Text(
text = product.price.toString(),
modifier = Modifier.padding(start = 8.dp)
)
}
}
}
< /code>
и вот мой MainActivity: < /p>
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.namecheap_training.model.Product
import com.example.namecheap_training.ui.theme.Namecheap_trainingTheme
import com.example.namecheap_training.ui.theme.ProductListScreen
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
Namecheap_trainingTheme {
ProductListScreen(
listOf(
Product("Test", "123$"),
Product("Test 2", "872$")
)
)
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... ck-compose
Почему кликабельный модификатор моего Lazycolumn не работает в JetPack Compose? ⇐ Android
Форум для тех, кто программирует под Android
1740335283
Anonymous
Я работаю над приложением JetPack Compose, где у меня есть Lazycolumn, отображающий список предметов. Каждый элемент обернут на поверхность с помощью кликабельного модификатора, но нажатие на элементы, кажется, не работает. Я добавил журналы отладки, и появляется, что функция Clickable никогда не вводится - нет журналов, когда я нажимаю на элементы. < /P>
Вот мой код: < /p>
import android.util.Log
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import com.example.namecheap_training.model.Product
@Composable
fun ProductListScreen(productList: List) {
LazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(20.dp)
) {
items(productList.size) { index ->
ProductItem(
product = productList[index],
onProductClick = {
Log.d("ProductListScreen", "Product clicked: ${productList[index].name}")
}
)
}
}
}
@Composable
fun ProductItem(
product: Product,
onProductClick: () -> Unit
) {
var isClicked by remember { mutableStateOf(false) }
Surface(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp)
.clickable {
isClicked = !isClicked // Toggle the clicked state
Log.d("ProductItem", "isClicked toggled to: $isClicked")
onProductClick() // Trigger the passed click action
},
color = if (isClicked) Color.Yellow else Color.LightGray
) {
Row(
modifier = Modifier
.padding(16.dp)
) {
Text(text = product.name)
Text(
text = product.price.toString(),
modifier = Modifier.padding(start = 8.dp)
)
}
}
}
< /code>
и вот мой MainActivity: < /p>
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.namecheap_training.model.Product
import com.example.namecheap_training.ui.theme.Namecheap_trainingTheme
import com.example.namecheap_training.ui.theme.ProductListScreen
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
Namecheap_trainingTheme {
ProductListScreen(
listOf(
Product("Test", "123$"),
Product("Test 2", "872$")
)
)
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79461764/why-is-my-lazycolumn-items-clickable-modifier-not-working-in-jetpack-compose[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия