class SettingsViewModelFactory(application: Application, owner: SavedStateRegistryOwner) : SavedStateViewModelFactory(application, owner){
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(SettingsViewModel::class.java)){
return SettingsViewModel() as T
}
throw IllegalArgumentException("Invalid ViewModel class")
}
}
Run Code Online (Sandbox Code Playgroud)
我在 SavedStateViewModelFactory 下方看到一条红色下划线,表示该类型是最终类型,不能继承。我该怎么办?文档太模糊了。另外我要在退货中放入什么状态?
尝试通过 jetpack 可组合函数从 MainActivity 转到另一个活动。像下面这样
@Composable
fun SwitchingActivity() {
val context = ContextAmbient.current
Button(onClick = {
context.startActivity(Intent(context, AnotherActivity::class.java))
})
{
Text(text = "Another Activity")
}
}
Run Code Online (Sandbox Code Playgroud)
但显示错误
未解决的参考:ContextAmbient
该怎么办?
使用 Jetpack Compose,如何格式化 TextField 值以遵循“dd/mm/yyyy”格式?
android android-jetpack android-jetpack-compose android-compose-textfield
我想将“Account”文本设置到TopAppBar的中心,并在TopAppBar的右侧添加一个图标,我该怎么做?
Scaffold(
scaffoldState = scaffoldState,
topBar = {
TopAppBar(
title = {
Text(
text = stringResource(R.string.account),
style = AppFont.PoppinsTypography.subtitle1
)
},
navigationIcon = {
Icon(
painter = painterResource(id = R.drawable.ic_left),
contentDescription = "back", tint = AppColor.brandColor.BLUE_DE_FRANCE
)
}, actions = {
viewModel.navigateUp()
}, backgroundColor = AppColor.neutralColor.DOCTOR
)
},
)
Run Code Online (Sandbox Code Playgroud) 我创建了自己的类,名为 MyInputRow。
@Composable
fun MyInputRow(
title: String,
modifier: Modifier = Modifier,
bgColor: Color,
icon: Painter,
clickAction: Unit
) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(6.dp)
.background(color = bgColor)
.clickable { clickAction },
verticalAlignment = Alignment.CenterVertically,
)
{
Text(
modifier = Modifier
.weight(1f)
.padding(6.dp)
.wrapContentWidth(Alignment.Start),
text = title,
)
Image(
painter = icon,
contentDescription = "icon"
)
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这个 clickAction 不起作用。具体来说,在显示屏幕时由于某种原因会调用clickAction,而在单击Row时不会调用clickAction。
其调用方式如下。
class AddActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
setContent {
MyTheme {
...
AddMain()
} …Run Code Online (Sandbox Code Playgroud) 我的代码:::
@Composable
fun VerticalImageCards(toolsList: List<HealthTool>) {
val domainName = stringResource(id = R.string.media_url)
FlowRow(mainAxisSpacing = 8.dp,
crossAxisSpacing = 16.dp,
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 16.dp),
mainAxisSize = SizeMode.Wrap) {
for (i in toolsList) {
val imgUrl = "$domainName${i.url}"
ToolsCardLayout(cardTitle = i.title, imgUrl = imgUrl)
}
}
}
Run Code Online (Sandbox Code Playgroud)
@Composable
fun ToolsCardLayout(
imgUrl: String,
cardTitle: String,
) {
Box(modifier = Modifier.clickable {}) {
AsyncImage(model = imgUrl,
contentDescription = null,
contentScale = ContentScale.Crop,
modifier = Modifier.fillMaxWidth())
Box(modifier = Modifier
.size(32.dp)
.align(Alignment.TopEnd)) {
Image(painter …Run Code Online (Sandbox Code Playgroud) gridview android-layout android-jetpack android-jetpack-compose
我想在函数中计算 Box 的高度,并且希望 compose 记住其结果而不是再次调用该函数。该函数具有一些可组合的内容,因此它是一个@Composable函数。
问题是,Compose 不允许我从remember块调用这个函数。
这是我的代码:
val coverImageHeightInDp = remember {
viewModel.calculateTopCoverHeightInDp()
}
Box(modifier = Modifier
.then(modifier)
.fillMaxWidth()
.height(coverImageHeightInDp)
)
Run Code Online (Sandbox Code Playgroud)
以及以下函数viewModel:
@Composable
fun calculateTopCoverHeightInDp(): Dp {
val originalImageDimens = Size(1440f, 828f)
val imageRatio = originalImageDimens.width / originalImageDimens.height
val configuration = LocalConfiguration.current
val screenWidthInDp = configuration.screenWidthDp.dp
return screenWidthInDp / imageRatio
}
Run Code Online (Sandbox Code Playgroud)
我该如何编码才能记住该函数的结果并且在屏幕旋转之前不会再次调用该函数?
谢谢。
我正在使用 Android 分页库,如下所述:https : //developer.android.com/topic/libraries/architecture/paging.html
但我也有一个 EditText 用于按名称搜索国家/地区。
如何过滤 Paging 库中的结果以仅显示匹配的国家/地区?
public final LiveData> countriesPagedList;
public AllCountriesViewModel(@NonNull Application application) {
super(application);
appRepository = new AppRepository(application);
PagedList.Config config = new PagedList.Config.Builder()
.setEnablePlaceholders(true)
.setPageSize(30)
.setInitialLoadSizeHint(10)
.setPrefetchDistance(50)
.build();
countriesPagedList = new LivePagedListBuilder(appRepository.getAllCountries(),config).build();
}
Run Code Online (Sandbox Code Playgroud) 在 nav_graph 中,即使我已经使用过,我也会收到警告
项目级gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.72'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
def nav_version = "2.3.0-beta01"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)
应用级gradle:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: "androidx.navigation.safeargs.kotlin"
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.demo.sample" …Run Code Online (Sandbox Code Playgroud) android android-jetpack android-jetpack-navigation android-navigation-graph
var noteListState by remember { mutableStateOf(listOf("Drink water", "Walk")) }
Run Code Online (Sandbox Code Playgroud)
这是我的物品清单。任何线索将不胜感激
android android-developer-api android-jetpack android-jetpack-compose