我正在使用导航图在片段之间导航。一切正常,但我想知道如何以优雅的方式传递参数名称。
这是我的代码片段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}]
两个问题:
在 navSheet.xml 中使用 a 有什么问题@string/fragment_b_arg_key_name,因此它不返回内容,@string/fragment_b_arg_key_name而是返回原始引用。
如何不对我在片段navSheet.xml和其他类中使用的参数名称进行硬编码?如何将这些密钥存储在一个地方?
xml android android-resources android-bundle android-architecture-navigation
我想知道在 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?
我希望将所有名称集中在一处。
我有使用 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以便重建?
android ×2
android-architecture-navigation ×1
android-room ×1
dart ×1
flutter ×1
kotlin ×1
xml ×1