onPostExecute에서 dialogFragment를 시작하려고하지만 어떤 이유로 supportFragmentManager가 null을 반환합니다. 주 활동 및 다른 조각에서 dialogFragment를 시작하려고 시도했지만 완벽하게 작동하지만 AsyncTask에서 시작할 수는 없습니다. 여기에 AsyncTask를은 다음과 같습니다 - 여기SupportfragmentManager가 null이됩니다. android kotlin
class SubscribeTask: AsyncTask<Void, Void, Void> {
var mContext: Context
var mTextView_temp: TextView
var mTextView_humidity: TextView
var mWeather_image: ImageView
var mMessage: JsonObject
var mResult = JsonObject()
var mTemp: String = ""
var mHumidity: String = ""
var mLdr: Boolean = true
var mRain: Boolean = false
var mWeather: Int = 0
var tester: Boolean = false
var mFire: Boolean = false
constructor(context: Context, textView_temp: TextView, textView_humidity: TextView, weather_image: ImageView, message: PNMessageResult){
mContext = context
mMessage = message.message.asJsonObject
mTextView_temp = textView_temp
mTextView_humidity = textView_humidity
mWeather_image = weather_image
}
override fun doInBackground(vararg p0: Void?): Void? {
if (mMessage.has("pi")){
mResult = mMessage.getAsJsonObject("pi")
mTemp = mResult.get("temp").asString
mHumidity = mResult.get("humidity").asString
mLdr = mResult.get("ldr").asBoolean
mRain = mResult.get("rain").asBoolean
mFire = mResult.get("fire").asBoolean
tester = true
if(mRain){
mWeather = R.drawable.rainy
}else if(mLdr){
mWeather = R.drawable.suny
}else{
mWeather = R.drawable.cloudyy
}
}
return null
}
override fun onPostExecute(result: Void?) {
if(tester) {
mTextView_temp.text = mTemp
mTextView_humidity.text = mHumidity
mWeather_image.setImageResource(mWeather)
if(mFire){
MainActivity().showAlertDialog("Fire", "There might be a fire in the house", R.drawable.house_fire, "Stop Alarm")
}
}
}
}
가 showAlertDialog() 함수입니다 : - 여기
fun showAlertDialog(title: String, content: String, imageid: Int, button: String){
val fm = supportFragmentManager
val alertDialogFragment = AlertFragment(title, content, imageid, button).newInstance(title, content, imageid, button)
alertDialogFragment.show(fm, "fragment_alert")
}
는 dialogFragment입니다 : -
class AlertFragment(val mTitle: String, val mContent: String, val mImageId: Int, val mButton: String) : DialogFragment() {
fun newInstance(title: String, content: String, imageid: Int, button: String): AlertFragment {
val alertfrag = AlertFragment(title, content, imageid, button)
val args = Bundle()
args.putString("title", title)
alertfrag.arguments = args
return alertfrag
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
return inflater!!.inflate(R.layout.fragment_alert, container, false)
}
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
title.text = mTitle
alertContent.text = mContent
alertImageId.setImageResource(mImageId)
alertButton.text = mButton
}
}
누군가가 나를 도와주세요 수 있습니다. Java의 응답도 괜찮습니다.
MainActivity().showAlertDialog(...)
이 가 수행되어야 하는지를 명확하지 않은 새로운 활동 객체 생성 : 당신의 postExecute
기능에
어떻게해야합니까에서 실행? –
일반적으로 사람들은 부모 작업의 WeakReference를 AsyncTask에 저장하고, 활동에 대한 어떤 것을 호출해야한다면'postExecute'에서 그 참조에 접근한다. – Kiskae
어떤 예제 나 코드를 제공 할 수 있습니까? 나는 멍청하다. –