Я разрабатываю одно приложение для Android, используя эту структуру Kotlin-MVP. У меня есть одно действие, и оно содержит TabLayout из 4 фрагментов. Весь фрагмент имеет одну кнопку в RecyclerView. Мне нужно показать один «Диалог фрагмента» на этом прослушивателе нажатия кнопки. Не могли бы вы сообщить мне, как я могу отобразить диалоговое окно фрагмента при прослушивании нажатия кнопки из класса адаптера? Пожалуйста, просмотрите снимок экрана.
Я обращаюсь к кнопке в событии прослушивателя кликов из класса адаптера, который находится ниже 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);
}
})
}
}
}
ServiceAssignDialog.newInstance().let { it?.show(supportFragmentManager); }
, но он говорит о неразрешенной ссылкеsupportFragmentManager
. - person Keval Gangani   schedule 18.05.2018