2017-09-23 20 views
0

如果沒有Internet連接可用,我想禁用我的edittext字段。所以,爲此,我讓廣播接收者類來檢測網絡變化活動,並且當我收到沒有互聯網連接可用的廣播時,那時我想禁用我的編輯文本字段,並且因爲互聯網連接是由用戶進行的,所以字段應該是自動啓用。最重要的是,我正在使用kotlin做這件事,我發現了很多解決方案,但都是針對java的。 所以,請幫助我,我該怎麼做。我曾試圖讓類實例訪問的EditText像下面訪問edittext來自BroadcastReceiver的Activity使用kotlin的Android類

var activityInstance = SetProfileActivity::class.objectInstance 

,並通過使用activityInstance對象我試圖訪問我的EditText像下面

activityInstance.myEtId.setEnabled(false) 

,但我不能訪問它,它返回null 。 我該怎麼做?

+1

做**不**創建一個活動的靜態引用。首先,你正在造成內存泄漏。其次,不存在活動存在的要求(例如,在過程終止後的某個時間接收的廣播)。而且,在Android 8.0+上,您無法通過清單註冊的接收器收聽此廣播。在活動內部使用'registerReceiver()'*而不是清單註冊的接收器,並且您將清除這些問題。 – CommonsWare

+0

是的,我也試過這個,並在我的活動課上註冊了我的廣播接收器,但我直到無法訪問我的編輯文本....我試圖從最近2天,但我最近得到解決方案,我必須申報我的broadcastreceiver類作爲內部類.. 順便說一句......感謝您的支持! –

+0

然後我建議您提供一個顯示此代碼的[mcve]。這將包括整個活動的源代碼,包括您通過registerReceiver()註冊的接收器。 – CommonsWare

回答

1

我得到了解決方案....我必須在我的活動類中註冊我的接收器,重要的是將broadcastreceiver類聲明爲內部類來訪問活動元素。

例如

inner class InternetOnReceiver : BroadcastReceiver(){ 
    override fun onReceive(context: Context?, intent: Intent?) { 
     etLocationPicker.hint = "Pick Location" 
     etLocationPicker.isEnabled = true 
    } 
} 
+1

如果您在粘貼代碼之前將代碼清理了一些,我會提高您的答案。我們只需要查看解決方案工作版本的最低要求(不是您的整個應用程序!) – Lissy

+0

感謝您的建議。我是新來的stackoverflow,所以,感謝幫助我提高我的印象stackoverflow。下次我會將你的建議留在我的腦海中,我已經編輯了我的答案並按照你的建議清理了它。現在你可以檢查它,並可以upvote它,如果你發現它的權利!再次感謝! @Lissy –

相關問題