标签: android-jetpack

Savedstateviewmodelfactory是final的,不能继承

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 下方看到一条红色下划线,表示该类型是最终类型,不能继承。我该怎么办?文档太模糊了。另外我要在退货中放入什么状态?

android kotlin android-viewmodel android-jetpack

0
推荐指数
1
解决办法
939
查看次数

未解析的参考:尝试从可组合函数转到另一个活动时的 ContextAmbient

尝试通过 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

该怎么办?

android android-jetpack android-jetpack-compose

0
推荐指数
1
解决办法
791
查看次数

0
推荐指数
1
解决办法
4435
查看次数

如何更改 jetpack compose 中 TopAppBar 的位置

我想将“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)

android android-jetpack android-jetpack-compose

0
推荐指数
1
解决办法
4420
查看次数

Jetpack Compose 自定义布局点击不起作用

我创建了自己的类,名为 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)

android android-jetpack android-jetpack-compose

0
推荐指数
1
解决办法
877
查看次数

在 Jetpack Compose 中实现垂直网格视图

我的代码:::

@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

0
推荐指数
1
解决办法
1197
查看次数

无法从记住块调用@Composable函数

我想在函数中计算 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 composition android-jetpack android-jetpack-compose

0
推荐指数
1
解决办法
744
查看次数

分页库过滤器/搜索 PageList&lt;T&gt;

我正在使用 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)

search android android-jetpack android-paging

-1
推荐指数
1
解决办法
3130
查看次数

Android:没有通过 app:startDestination 为 xxx:id/nav_graph 定义起始目的地

在 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

-2
推荐指数
1
解决办法
4345
查看次数

Android:Activity 中的 Jetpack Compose 和 XML

  1. 有人可以向我展示如何在同一活动中添加 jetpack 撰写 y xml。请举个例子

android kotlin android-jetpack android-jetpack-compose

-3
推荐指数
3
解决办法
1823
查看次数

如何在 Jetpack Compose 中实现搜索 - Android

var noteListState by remember { mutableStateOf(listOf("Drink water", "Walk")) }
Run Code Online (Sandbox Code Playgroud)

这是我的物品清单。任何线索将不胜感激

android android-developer-api android-jetpack android-jetpack-compose

-4
推荐指数
1
解决办法
1万
查看次数