当前位置: 首页 > 知识库问答 >
问题:

如何用刀柄绑定/提供活动或片段?

乐健
2023-03-14
class @Inject constructor (callBack: Callback): RecyclerView.Adapter...
@Binds fun bindCallback(activity: MyActivity): Adapter.Callback

我怎样才能做到这一点呢?我如何提供或绑定活动或片段与刀柄?

共有1个答案

宋伯寅
2023-03-14

解决方法相当简单。

所以几天前我回来看我的问题,只看到仍然没有新的解决方案,所以我尝试了Bartek解决方案,但不能使它工作,而且即使它工作了,干净的Hilt代码变得太乱了,所以我做了一点调查,玩了一点,发现解决方案实际上是愚蠢的容易。

是这样的:

@HiltAndroidApp
class MyApp: Application()
@AndroidEntryPoint
class MainActivity : AppCompatActivity(), SomeClass.Callback {

    @Inject
    lateinit var someClass: SomeClass

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)  
    }

    override fun onWhatEver() {
        // implement
    }
}
class SomeClass @Inject constructor(
    private val callback: Callback
) {

    fun activateCallback(){
        callback.onWhatEver()
    }

    interface Callback{
        fun onWhatEver()
    }
}
@Module
@InstallIn(ActivityComponent::class)
object SomeModule{

    @Provides
    fun provideCallback(activity: Activity) =
        activity as SomeClass.Callback
    
}

这就是我们所需要的。我们不能用@bind将活动绑定到回调,因为它需要显式提供并强制转换到回调,以便应用程序可以构建。

该模块安装在ActivityComponent中,并且知道一个通用的“活动”,如果我们将它转换到回调,Hilt是内容,并且活动绑定到回调,并且Hilt将知道如何提供回调,只要它在特定的活动范围内。

多个活动/片段

@HiltAndroidApp
class MyApp: Application()
@AndroidEntryPoint
class BooksActivity : AppCompatActivity(), BooksAdapter.Callback{

        @Inject
        lateinit var adapter: BooksAdapter

        ...

        override fun onItemClicked(book: Book) {...}
    }
}
@AndroidEntryPoint
class AuthorsActivity : AppCompatActivity(), AuthorsAdapter.Callback{

    @Inject
    lateinit var adapter: AuthorsAdapter

    ...

    override fun onItemClicked(author: Author) {...}
}
class BooksAdapter @Inject constructor (
    val callback: Callback
) ... {

    ...

    interface Callback{
        fun onItemClicked(book: Book)
    }
}

AuthorsAdapter

class AuthorsAdapter @Inject constructor (
    val callback: Callback
) ... {

    ...

    interface Callback{
        fun onItemClicked(auhtor: Auhtor)
    }
}

AuhtorsModule

@Module
@InstallIn(ActivityComponent::class)
object AuthorsModule {
    @Provides
    fun provideCallback(activity: Activity) =
        activity as AuthorsAdapter.Callback
}

Books模块

@Module
@InstallIn(ActivityComponent::class)
object BooksModule {
    @Provides
    fun provideCallback(activity: Activity) =
        activity as BooksAdapter.Callback
}
 类似资料:
  • 我是新来的,用匕首。所以,我不能解决这个有什么问题。我只想问在这里解决它。 这是错误: c:\ Users \ MSI \ Documents \ MyAndroidProjects \ movie projects \ App \ build \ generated \ hilt \ component _ sources \ debug \ com \ example \ movie App

  • 我的应用程序(最小API14)使用带有3个选项卡的ActionBar。选项卡是:i。输入数据(约10个片段)ii。管理数据(15个片段)三.查看数据(8个片段)。每个选项卡都有一个默认片段,但根据用户的选择会有多个片段。 我希望用户能够在3个选项卡之间滑动(通过滑动内容),因此我需要使用ViewPager和兼容性库V4。 我得到的建议(经过大量研究)是使用一个MainActivity,它承载Act

  • 我试图遵循官方google文档https://developer.android.com/tools/data-binding/guide.html中的数据绑定示例 只是我试图将数据投标应用于一个片段,而不是一个活动。 我当前在编译时遇到的错误是 我怀疑不知道它应该绑定到哪个布局文件-因此出现错误。有什么建议吗?

  • 问题内容: 从Activity中包含的RecyclerView的适配器中,我试图在按下RecyclerView的元素时启动一个片段,这是我现在的代码: 我测试了它是否启动了我创建的一些“测试活动”,所以我知道除了片段启动之外的所有功能都可以正常工作。 错误在这里: 我正在启动作为活动的Fragment,所以当我运行应用程序时,它崩溃了,并告诉我在清单中将MainFragment声明为活动。 如何从

  • //使用startActivity(intent)也不起作用//无论我做什么,应用程序都会崩溃

  • 问题内容: 我想和到App Engine的工作之外。这些模块是否需要App Engine才能正常运行?我想在Google Cloud Storage上为图像创建公共的但不可猜测的URL,并通过Django提供它们。 我了解到这是通过和完成的。这是我到目前为止所拥有的: 并且image_url应该是我的图像的公共但不可猜测的URL。如果我运行此代码,则错误为 这表明blobstore需要代理(也称为