我用来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) 我已经阅读了有关可组合函数的官方文档
但我无法理解可组合函数。
例如,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) 我无法实现灰度转换。
当前加载图像的代码。
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?
YouTube 上有一些关于如何在 XML android 中设置双后按退出的教程,但大多数都是 JAVA 的,没有一个是 Jetpack Compose 的。
那么我们如何在 Jetpack Compose 中设置双后按呢?
我的意思是,如果我们确定要退出,则在 Toast 中要求我们再次按回键。感谢帮助
基本上,我正在寻找 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
我尝试通过参考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) 我目前正在尝试为我的论文编写一个应用程序,目前我正在研究不同的方法。因为我真的很喜欢 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) 我目前在 Jetpack Compose 中遇到一个非常奇怪的问题。我正在使用导航组件库(在 NavHostFragment 中托管片段)。一些较新的 Fragment 已经在使用 Compose,但我在极少数情况下会遇到此崩溃。主要是在使用导航抽屉导航到设置页面并单击底部导航视图中的某个项目时。我目前正在使用 Jetpack Compose alpha-12 和 Navigation 2.3.0。
(使用普通 ViewBinding 时不会崩溃)
@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) 致力于增强我的应用程序的辅助功能。
从Docs中,我可以看到Card和onClick作为onClickLabelAPI 的一部分。
对于没有 的可组合项onClick,我们可以使用Modifier.clickableor Modifier.semantics。
但是Button、IconButton、FloatingActionButton和TextButton呢OutlinedButton?
可组合项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)
这似乎太令人困惑IconButton了onClick。所以我不能完全同意Modifier.clickable或Modifier.semantics。
同样Modifier.clickable也是期待 …
android ×8
kotlin ×3
android-architecture-navigation ×1
coil ×1
lazycolumn ×1
react-query ×1
reactjs ×1
talkback ×1