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