小编Abh*_*bhi的帖子

React-query:如果查询为空,如何避免触发函数调用?

我用来react-query调用API。该调用运行良好,并且每次在输入字段中更新查询值时都会执行该调用。
不幸的是,即使查询为空,它也会触发 API 调用。

例如,当用户加载应用程序时,输入(以及查询)将为空。

如何仅在有查询时触发API调用?

代码

// API call
export async function myQuery(query) {
  try {
    const res = await ax.get("myapiurl", {
      params: { query },
    });
    return res.data;
  } catch {
    return null;
  }
}

// react-query
const { status, data } = useQuery(
  ["myquery", { query }],
  () => myQuery(query)
);
Run Code Online (Sandbox Code Playgroud)

reactjs react-query

6
推荐指数
1
解决办法
6262
查看次数

Android 中的可组合函数和普通函数有什么区别?

我已经阅读了有关可组合函数的官方文档

但我无法理解可组合函数。
例如,rememberWatchState()Composable代码 A 中的一个函数,但它不像普通函数那样定义我的应用程序的 UI。

Android中的Composable函数和普通函数有什么区别?

代码A

@Composable
fun ScreenHome_Watch(
    watchState:WatchState =  rememberWatchState()
){
    val density= watchState.density
}


@Composable
fun rememberWatchState(): WatchState {
    val context: Context = LocalContext.current
    val temp = loadDBWarningValueWithPreference(context)

    val watchState = WatchState(temp.toFloat(),LocalDensity.current)

    return remember {
        watchState    
    }
}

class WatchState(
    private val alarmValue:Float,
    val density: Density
){
    ...
}


fun drawDial(
    drawScope: DrawScope,
    watchState:WatchState
) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

6
推荐指数
1
解决办法
2285
查看次数

如何在jetpack compose中使用AsyncImage加载图像并进行灰度转换?

我无法实现灰度转换。

当前加载图像的代码。

AsyncImage(
    model = ImageRequest.Builder(LocalContext.current)
        .data(url)
        .crossfade(true)
        .build(),
    contentDescription = "",
    contentScale = ContentScale.Crop,
    modifier = Modifier
        .size(44.dp)
        .clip(CircleShape),
)
Run Code Online (Sandbox Code Playgroud)

我发现的灰度转换代码使用了已弃用的代码rememberImagePainter

如何使用rememberAsyncImagePainteror来实现这一点AsyncImage

android android-jetpack-compose coil

6
推荐指数
1
解决办法
7594
查看次数

如何在 Jetpack Compose 中设置双击退出?

YouTube 上有一些关于如何在 XML android 中设置双后按退出的教程,但大多数都是 JAVA 的,没有一个是 Jetpack Compose 的。

那么我们如何在 Jetpack Compose 中设置双后按呢?

我的意思是,如果我们确定要退出,则在 Toast 中要求我们再次按回键。感谢帮助

kotlin android-jetpack android-jetpack-compose

6
推荐指数
1
解决办法
1604
查看次数

在 Jetpack Compose 中编写 Android 视图代码时如何更改初始 Talkback 焦点

基本上,我正在寻找 Jetpack Compose 中与sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)xml 中使用的等效项。

目前,我的页面看起来是这样的结构:

Surface {
   TopToolbarBar() {
     Row() {
       NavigationIcon()
       Title()
       ....
     }
   }
   Card1{
     Row1()
     Column() {
       RowA()
       RowB()
       Button()
     }
   }
   Card2{
     ...
   }
}
Run Code Online (Sandbox Code Playgroud)

我想将可访问性焦点放在“Button()而不是NavigationIcon()此页面打开时”上。不确定是否有任何解决方法可以实现这一目标?我认为没有官方的方法可以做到这一点。

我知道有一个 requestFocus() 方法和 FocusManager 概念。但是,我认为它们在可访问性方面没有用处focus

我尝试设置 focusRequester 并在 LaunchedEffect() 块内调用 requestFocus() 。但这是行不通的。初始 Talkback 焦点将停留在导航图标上,这是我的“撰写”页面最左侧和最顶部的项目。

有什么提示吗?我还发现有一个SemanticsPropertyReceiver.requestFocus但几乎没有一个示例可以用来理解它是如何工作的。

android accessibility kotlin talkback android-jetpack-compose

6
推荐指数
0
解决办法
544
查看次数

带有片段导航组件的底部导航视图设置不起作用

我尝试通过参考Navigation Codelab使用导航组件实现底部导航视图以设置片段转换。

单击底部导航视图时,片段不会更改。

注意:
我正在尝试在另一个片段中实现底部导航视图。(不像代码实验室示例中的活动)

主活动.kt:

class MainActivity : AppCompatActivity() {

    // Data binding
    private lateinit var mainActivityBinding: MainActivityBinding

    // On activity creation starting
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Set activity layout
        mainActivityBinding = DataBindingUtil.setContentView(this, R.layout.main_activity)
    }
}
Run Code Online (Sandbox Code Playgroud)

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".activity.MainActivity">

    <data>

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/main_activity_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <fragment
            android:id="@+id/main_activity_nav_host_fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:defaultNavHost="true"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:navGraph="@navigation/activity_navigation" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>
Run Code Online (Sandbox Code Playgroud)

活动导航.xml:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_navigation" …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-architecture-navigation

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

Jetpack 撰写更新列表元素

我目前正在尝试为我的论文编写一个应用程序,目前我正在研究不同的方法。因为我真的很喜欢 Flutter 并且论文要求我使用 Java/Kotlin,所以我想使用 Jetpack compose。

目前,我在尝试更新 ListElements 时陷入困境。

我想要一个显示实验及其状态/结果的列表。一旦我按下按钮,我希望实验运行,并在实验完成后更新其状态。目前,run 方法除了将状态设置为成功之外不执行任何操作。问题是,一旦实验更新其状态,我不知道如何从 ExperimentRow 的 viewModel 触发重组。

实验活动:

class ExperimentsActivity : AppCompatActivity() {

val exViewModel by viewModels<ExperimentViewModel>()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    //For now this is just Dummy Data and will be replaced
    exViewModel.experiments += listOf(
        Experiment("Test1", exViewModel::experimentStateChanged),
        Experiment("Strongbox", exViewModel::experimentStateChanged)
    )

    setContent {
        TpmTheme {
            // A surface container using the 'background' color from the theme
            Surface {
                ExperimentScreen(
                    exViewModel.experiments,
                    exViewModel::startTests
                )
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

实验视图模型:

class ExperimentViewModel : …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

5
推荐指数
1
解决办法
6750
查看次数

使用 Jetpack Navigation 时,Compose Fragment 会使应用程序崩溃

我目前在 Jetpack Compose 中遇到一个非常奇怪的问题。我正在使用导航组件库(在 NavHostFragment 中托管片段)。一些较新的 Fragment 已经在使用 Compose,但我在极少数情况下会遇到此崩溃。主要是在使用导航抽屉导航到设置页面并单击底部导航视图中的某个项目时。我目前正在使用 Jetpack Compose alpha-12 和 Navigation 2.3.0。

(使用普通 ViewBinding 时不会崩溃)

https://youtu.be/__pdZmApEfE

@AndroidEntryPoint
class StatisticsFragment : Fragment() {

  override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
  ): View {
    return ComposeView(requireContext()).apply {
      setContent {
        TemporyTheme {
          Text("Hello Compose!")
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
    ...>

    <RelativeLayout
        ...>

        <RelativeLayout
            ...>

            <com.google.android.material.appbar.MaterialToolbar
                ... />

        </RelativeLayout>

        <!-- NavHost -->
        <androidx.fragment.app.FragmentContainerView
            android:id="@+id/nav_host_fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            app:defaultNavHost="true"
            app:navGraph="@navigation/navigation_main"
            ... />

        <com.google.android.material.bottomnavigation.BottomNavigationView
            ... />

    </RelativeLayout>

    <com.google.android.material.navigation.NavigationView
        .../> …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

5
推荐指数
1
解决办法
1469
查看次数

Jetpack 为 Button 和 IconButton 编写 onClickLabel

致力于增强我的应用程序的辅助功能。

Docs中,我可以看到CardonClick作为onClickLabelAPI 的一部分。

对于没有 的可组合项onClick,我们可以使用Modifier.clickableor Modifier.semantics

但是ButtonIconButtonFloatingActionButtonTextButtonOutlinedButton
可组合项onClick作为 API 的一部分,但没有onClickLabel.

这按预期工作。但这是编写这段代码的正确方法吗?

IconButton(
    onClick = navigateUp,
    modifier = Modifier.clickable(
        onClickLabel = "Navigate up",
        onClick = {},
    )
) {
    Icon(
        imageVector = Icons.Rounded.ArrowBack,
        contentDescription = stringResource(
            id = R.string.top_app_bar_content_description_navigate_up,
        ),
    )
}
Run Code Online (Sandbox Code Playgroud)

这似乎太令人困惑IconButtononClick。所以我不能完全同意Modifier.clickableModifier.semantics
同样Modifier.clickable也是期待 …

android accessibility android-jetpack-compose

5
推荐指数
1
解决办法
4903
查看次数

如何计算最后一个可见项目后惰性列中的空白空间

如何计算 Jetpack compose 中最后一个可见项目之后惰性列中的空白空间。

在此输入图像描述

android android-jetpack android-jetpack-compose lazycolumn

5
推荐指数
1
解决办法
1027
查看次数