私はdialogPragmentをonPostExecuteから起動しようとしていますが、何らかの理由で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の回答も大丈夫です。次のコードを持っているあなたのpostExecute
機能で
を実行するようなインターフェイスを作成しますか? –
一般に、親アクティビティーの 'WeakReference'を' AsyncTask'に格納し、アクティビティーで何かを呼び出す必要がある場合は、 'postExecute'でその参照にアクセスします。 – Kiskae
どのような例やコードを与えることができます私はnoobです –