Я разрабатываю одно приложение для Android, используя эту структуру Kotlin-MVP . У меня есть одно действие, и оно содержит TabLayout из 4 фрагментов. Весь фрагмент имеет одну кнопку в RecyclerView. Мне нужно показать одно «Fragment Dialog» на слушателе щелчка этой кнопки. Подскажите, пожалуйста, как я могу показать диалог фрагмента при прослушивании нажатия кнопки из класса адаптера? Пожалуйста, просмотрите скриншот.
Я получаю доступ к кнопке на событии прослушивателя щелчков из класса Adapter, который находится ниже itemView.btn_accept.setOnClickListener
:
class InApprovalAdapter(private val jobListItems: MutableList<JobItem>) : RecyclerView.Adapter<InApprovalAdapter.JobViewHolder>() {
private var _ProfileId: Long? = null;
fun getProfileId(): Long? {
return _ProfileId
}
fun setProfileId(s: Long) {
_ProfileId = s
}
private var _UserToken : String? = null;
fun getUserToken(): String? {
return _UserToken
}
fun setUserToken(s: String) {
_UserToken = s
}
private var _UserTypeId : Long? = null;
fun getUserTypeId(): Long? {
return _UserTypeId
}
fun setUserTypeId(s: Long) {
_UserTypeId = s
}
override fun getItemCount() = this.jobListItems.size
override fun onBindViewHolder(holder: JobViewHolder, position: Int) = holder.let {
it.clear()
it.onBind(position)
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int) = JobViewHolder(LayoutInflater.from(parent?.context)
.inflate(R.layout.item_inapproval_list, parent, false))
internal fun addJobsToList(jobs: List<JobItem>, profileId: Long?, userToken: String?, userTypeId: Long?) {
this.jobListItems.addAll(jobs)
setProfileId(profileId!!.toLong())
setUserToken(userToken!!)
setUserTypeId(userTypeId!!)
notifyDataSetChanged()
}
inner class JobViewHolder(view: View) : RecyclerView.ViewHolder(view) {
fun clear() {
itemView.tv_job_id.text = "";
itemView.tv_job_title.text= "";
//itemView.tv_job_description.text ="";
itemView.tv_job_category.text ="";
itemView.tv_date_created.text ="";
}
fun onBind(position: Int) {
val (jobId, name, description, serviceId, serviceName,
address, engineerIds, engineerNames, startDateTimeUtc,
startDateTimeLocal, endDateTimeUtc, endDateTimeLocal,
customerId, customerName, customerMobile, customerAltMobile,
priorityTypeId, priorityTypeName, statusTypeId, statusTypeName,
isDeleted, isStatusTypeActive, createdBy, createdByName,
dateCreatedPretty, modifiedBy, modifiedByName ,hasJobMedia,
jobMedias, hasJobFeedback, jobDetailsImage, dateCreatedUtc, dateModifiedUtc) = jobListItems[position]
inflateData(jobId, name,
description,
serviceId,
serviceName,
address,
engineerIds,
engineerNames,
startDateTimeUtc,
startDateTimeLocal,
endDateTimeUtc,
endDateTimeLocal,
customerId,
customerName,
customerMobile,
customerAltMobile,
priorityTypeId,priorityTypeName,
statusTypeId,
statusTypeName,
isDeleted,
isStatusTypeActive,
createdBy,
createdByName,
dateCreatedPretty,
modifiedBy,
modifiedByName ,
hasJobMedia,
jobMedias, hasJobFeedback, jobDetailsImage, dateCreatedUtc, dateModifiedUtc)
setItemClickListener(jobId)
}
private fun setItemClickListener(jobId: Long?) {
itemView.setOnClickListener {
jobId?.let {
try {
val intent = Intent(itemView.context, ServiceDetailActivity::class.java)
intent.putExtra("JobId", jobId)
itemView.context.startActivity(intent)
} catch (e: Exception) {
Toast.makeText(itemView.context, e.message, Toast.LENGTH_LONG).show()
}
}
}
itemView.btn_accept.setOnClickListener {
}
itemView.btn_reject.setOnClickListener{
}
}
private fun inflateData(jobId: Long?, name: String?, description: String?, serviceId: Long?, serviceName: String?, address: String?, engineerIds: String?,
engineerNames: String?, startDateTimeUtc: String?, startDateTimeLocal: String?, endDateTimeUtc: String?,
endDateTimeLocal: String?, customerId: Long?, customerName: String?, customerMobile:String?, customerAltMobile: String?,
priorityTypeId: Long?, priorityTypeName: String?, statusTypeId: Long?, statusTypeName: String?, isDeleted: Boolean?, isStatusTypeActive: Boolean?,
createdBy: Long?, createdByName: String?, dateCreatedPretty: String?, modifiedBy: Long?, modifiedByName: String?, hasJobMedia: Boolean?,
jobMedias: List<JobDetailsImage>?, hasJobFeedback: Boolean?, jobDetailsImage: List<JobDetailsImage>?, dateCreatedUtc: String?, dateModifiedUtc: String?) {
name.let {
itemView.tv_job_title.text = it;
}
jobId.let {
itemView.tv_job_id.text = "Job\n#" + it
}
/*description.let {
itemView.tv_job_description.text = it
}*/
serviceName.let {
itemView.tv_job_category.text = it
}
dateCreatedPretty.let {
itemView.tv_date_created.text = it
}
if(getUserTypeId() == AppConstants.UserType.Administrator.type ||
getUserTypeId() == AppConstants.UserType.Admin.type)
{
itemView.btn_reject.text = "Reject";
}
else
{
itemView.btn_reject.text = "Delete";
itemView.btn_accept.visibility = View.GONE
}
}
private fun callJobStatusChangeApi(jobId: Long?, statusTypeId: Long?)
{
val androidId = Settings.Secure.getString(itemView.context.contentResolver, Settings.Secure.ANDROID_ID)
Rx2AndroidNetworking.post(ApiEndPoint.ENDPOINT_JOB_CHANGEJOBSTATUS)
.addHeaders("Authorization", "bearer " + getUserToken())
.addQueryParameter("profileId", getProfileId().toString())
.addQueryParameter("jobId", jobId.toString())
.addQueryParameter("statusTypeId", statusTypeId.toString())
.addQueryParameter("DeviceId", androidId.toString())
.build()
.getAsObject(BaseResponse::class.java, object : ParsedRequestListener<BaseResponse> {
override fun onResponse(baseResponse: BaseResponse) {
// do anything with response
println("succeeded : " + baseResponse.succeeded)
println("message : " + baseResponse.message)
if(baseResponse.succeeded)
{
val inApprovalFragment : InApprovalFragment = InApprovalFragment()
inApprovalFragment.showStatusSubmissionSuccessMessage(itemView.context, baseResponse.message);
notifyDataSetChanged();
}
}
override fun onError(anError: ANError) {
// handle error
println(anError.message);
}
})
}
}
}