小编wap*_*apn的帖子

如何在android导航组件中传递参数名称?

我正在使用导航图在片段之间导航。一切正常,但我想知道如何以优雅的方式传递参数名称。

这是我的代码片段navSheet.xml

源片段动作:

    <action
        android:id="@+id/action_go_to_B"
        app:destination="@id/id_fragment_b">
        <argument
            android:name="@string/fragment_b_arg_key_name"
            app:argType="integer"/>
    </action>
Run Code Online (Sandbox Code Playgroud)

目标片段:

<fragment
    android:id="@+id/id_fragment_b"
    android:name="pl.asd.FragmentB"
    tools:layout="@layout/fragment_b">

    <argument
        android:name="@string/fragment_b_arg_key_name"
        app:argType="integer"/>
</fragment>
Run Code Online (Sandbox Code Playgroud)

我将我的参数键存储在string.xml

<string name="fragment_b_arg_key_name" translatable="false">arg_fragment_b</string>
Run Code Online (Sandbox Code Playgroud)

最后,我尝试在目标片段中得到我的论点:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {
            selectedId = it.getInt(getString(R.string.fragment_b_arg_key_name))
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题在于android:name="@string/fragment_b_arg_key_name". 我在调试器上看到捆绑包密钥不正确。它应该是这样的:

Bundle[{arg_fragment_b=-730732511}]

但我得到:

Bundle[{@string/fragment_b_arg_key_name=-730732511}]

两个问题:

  1. 在 navSheet.xml 中使用 a 有什么问题@string/fragment_b_arg_key_name,因此它不返回内容,@string/fragment_b_arg_key_name而是返回原始引用。

  2. 如何不对我在片段navSheet.xml和其他类中使用的参数名称进行硬编码?如何将这些密钥存储在一个地方?

xml android android-resources android-bundle android-architecture-navigation

8
推荐指数
1
解决办法
8489
查看次数

如何使用 Android Room 正确获取 DAO 类中的表名称

我想知道在 Android Room 查询中使用表名时如何避免硬编码。我用 开发Kotlin,但说实话,在这个问题上,使用 Java 还是 Kotlin 并不重要。

让我们看看简单的类:

DAO接口:

@Dao
interface UserDAO {

    @Query("SELECT * FROM USER")
    fun getAll(): List<User>
}
Run Code Online (Sandbox Code Playgroud)

实体类:

@Entity(tableName = "USER")
class User {
}
Run Code Online (Sandbox Code Playgroud)

可以看到表名“USER”被硬编码在UserDAO中的@Query中。如何避免这种情况?如何引用@Entity参数tableName

我希望将所有名称集中在一处。

android kotlin android-room

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

如何在 Flutter hooks 中使用 List&lt;int&gt; 的State?

我有使用 flutter hooks 的非常简单的情况:

class PositionedTiles extends HookWidget {
  @override
  Widget build(BuildContext context) {
    final counterList = useState<List<int>>([1,2,3,4,5]);
    return Scaffold(
        body: Text("Counter: ${counterList.value}"),
        floatingActionButton: FloatingActionButton(
              onPressed: () => counterList.value.removeAt(0),
              child: const Icon(Icons.sentiment_very_satisfied)),
        );
    );
  }
Run Code Online (Sandbox Code Playgroud)

因此,单击后floatingActionButton打印的列表 ( counterList) 不会改变。我的结论是没有调用重建。

为什么 hook 没有看到列表已更改?

如何指示列表 ( counterList) 在调用后已更改onPressed以便重建?

dart flutter flutter-widget flutter-hooks

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