我想知道如何在将 Hilt 用于 DI 时将运行时参数传递给 ViewModel 的构造函数?在使用 Hilt 之前,我有一个如下所示的 ViewModel:
class ItemViewModel(private val itemId: Long) : ViewModel() {
private val repo = ItemRepository(itemId)
}
class ItemViewModelFactory(private val itemId: Long) : ViewModelProvider.Factory {
@Suppress("unchecked_cast")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(ItemViewModel::class.java)) {
return ItemViewModel(itemId) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
Run Code Online (Sandbox Code Playgroud)
我在我的片段中创建了上面的 ViewModel,如下所示:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val args: ItemScreenFragmentArgs by navArgs()
val itemId = args.itemId
//Create the view model …Run Code Online (Sandbox Code Playgroud) android dependency-injection android-fragments android-viewmodel dagger-hilt
我正在使用MxM三角矩阵,其形式如下:
M = [m00 m10 m20 m30 m40]
[m11 m21 m31 m41 ]
[m22 m32 m42 ]
[m33 m43 ]
[m44 ]
Run Code Online (Sandbox Code Playgroud)
如果根据索引更容易想象这一点,它看起来像这样:
M = [0 1 3 6 10]
[2 4 7 11 ]
[5 8 12 ]
[9 13 ]
[14 ]
Run Code Online (Sandbox Code Playgroud)
我知道这种索引方式可能看起来很奇怪,但如果我能保持索引系统的原样,那么这个模块可以很好地与其他模块配合使用会更容易.
我正在努力学习一种算法,该算法采用矩阵的索引和大小,可以返回给定索引所属的行和列.理想情况下,我将有两个功能,如:
int getRow (int index, int size);
int getCol (int index, int size);
Run Code Online (Sandbox Code Playgroud)
所以 getRow (7, 5)会回来3
并 getCol (7, 5)会回来1
我已经遇到过这个帖子,但我似乎无法修改那里的解决方案,因为我正在编写索引的方式.
我的班级结构如下:
Test_Camera.h:
class Test_Camera : public Camera_Interface {
public:
Test_Camera (string const& aName);
...
Run Code Online (Sandbox Code Playgroud)
Test_Camera.cpp
Test_Camera::Test_Camera(string const& aName) : Camera_Interface(0, 0, 0, 0), name(aName)
Run Code Online (Sandbox Code Playgroud)
在我实例化Test_Camera对象的代码中,我有2个场景.第一个编译好,但第二个编译没有,我无法弄清楚为什么.
Test_Camera cam ("cam"); // This compiles
Test_Camera& cam ("cam"); // This does not compile
Run Code Online (Sandbox Code Playgroud)
当我尝试编译第二个例子时,我收到一个错误:
错误:从'const char*'类型的临时类型初始化非const引用到类型'Test_Camera&'的无效
我也尝试过:
string name = "cam";
Test_Camera& cam (name); //does not compile
Run Code Online (Sandbox Code Playgroud)