Java 如何在Android中使用界面作为侦听器和对话框?

Java 如何在Android中使用界面作为侦听器和对话框?,java,android,kotlin,android-fragments,design-patterns,Java,Android,Kotlin,Android Fragments,Design Patterns,我不知道如何使用Android中的接口作为事件侦听器。我使用方法onProfilePictureTaken定义了一个接口ProfilePictureTakenEvent。在一个对话框中,用户可以用相机拍摄图像,该对话框通过点击一个片段按钮打开。我使用了方法startActivityForResult。我在片段中得到的这个操作的结果(图像)(覆盖的方法onActivityResult) 现在我的问题是:当我在片段中得到结果时,如何在对话框中显示此图片?我认为我可以使用事件侦听器,但我不知道如何使用

我不知道如何使用Android中的接口作为事件侦听器。我使用方法
onProfilePictureTaken
定义了一个接口
ProfilePictureTakenEvent
。在一个对话框中,用户可以用相机拍摄图像,该对话框通过点击一个片段按钮打开。我使用了方法
startActivityForResult
。我在片段中得到的这个操作的结果(图像)(覆盖的方法
onActivityResult

现在我的问题是:当我在片段中得到结果时,如何在对话框中显示此图片?我认为我可以使用事件侦听器,但我不知道如何使用,也没有找到任何解释

这是我的代码:

UserFragment.tk

class UserFragment() : Fragment() {
    private var userFragment: UserFragment? = null
    private var profilePictureTakenEvent: ProfilePictureTakenEvent? = null

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_user, container, false)
    }

    override fun onViewCreated(
        view: View,
        savedInstanceState: Bundle?
    ) {
        super.onViewCreated(view, savedInstanceState)

        this.userFragment = this

        val database = UserManagerDatabase(view.context)
        val repository = UserRepository(database)
        val factory = UserViewModelFactory(repository)

        val viewModel = ViewModelProviders.of(this, factory).get(UserViewModel::class.java)
        val adapter = UserAdapter(listOf(), viewModel)

        rvUsers.layoutManager = LinearLayoutManager(view.context)
        rvUsers.adapter = adapter

        var emailAddresses: List<String> = emptyList()

        viewModel.getAll().observe(viewLifecycleOwner, { userList ->
            adapter.users = userList
            emailAddresses = userList.map { user -> user.email }

            adapter.notifyDataSetChanged()
        })

        viewModel.getEmailAddresses().observe(viewLifecycleOwner, {emailAddresses = it })

        fBtnAddUser.setOnClickListener {
            AddUserDialog(view.context,
            object: UserCreateEvent {
                override fun onAddButtonClicked(user: User) {
                    viewModel.insert(user)
                }
            }, emailAddresses, userFragment).show()
        }
    }

    fun setProfilePictureTakenEvent(profilePictureTakenEvent: ProfilePictureTakenEvent) {
        this.profilePictureTakenEvent = profilePictureTakenEvent
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (requestCode == AddUserDialog.REQUEST_IMAGE_CAPTURE) {
            this.profilePictureTakenEvent?.onProfilePictureTaken(data)
        }
    }
}

据我所知,您的对话框在拍摄完图像后仍会显示, 与从该片段创建对话框一样,一个简单的解决方案是:将对象保存在全局变量中,可以调用函数来显示捕获的图像。
比如:

val dialog = AddUserDialog(....)
里面

onActivityResult(..)


因此,实际上,您不需要任何侦听器在对话框中显示图像。

这非常简单,而且很有效。谢谢!
val dialog = AddUserDialog(....)
onActivityResult(..)
dialog.updateImage(data)