2017-09-23 8 views
0

인터넷 연결을 사용할 수없는 경우 편집 텍스트 필드를 비활성화하고 싶습니다. 그래서, 나는 네트워크 변경 활동을 감지하는 broadcastreceiver 클래스를 만들었고, 인터넷 연결을 사용할 수 없다는 브로드 캐스트를 받으면 그 시간에 편집 텍스트 필드를 비활성화하고 인터넷 연결이 사용자에 의해 이루어 지도록 필드가 있어야합니다. 자동으로 활성화됩니다. 가장 중요한 것은 kotlin을 사용하여이 작업을 수행하고 있으며 많은 솔루션을 찾았지만 모두 java에 대한 것입니다. 그래서, 어떻게 도와 드릴까요? 난 내가 아래kotlin을 사용하여 android의 BroadcastReceiver 클래스에서 edittext 활동에 액세스하십시오.

activityInstance.myEtId.setEnabled(false) 

처럼 내 글고 치기에 액세스하려고 아래

var activityInstance = SetProfileActivity::class.objectInstance 

처럼 글고 치기에 액세스하고 activityInstance 개체를 사용하여 클래스 인스턴스를 얻기 위해 노력했다하지만 난 그것을 액세스 할 수 있으며 null을 반환 . 어떻게해야합니까?

+1

** 활동에 대한 '정적'참조를 만들지 마세요. 첫째, 메모리 누수가 발생하고 있습니다. 둘째로, 활동이 존재할 필요는 없다 (예를 들어, 프로세스가 종료 된 후 언젠가 방송이 수신 됨). Android 8.0 이상에서는 매니페스트 등록 리시버를 통해이 브로드 캐스트를 청취 할 수 없습니다. 매니페스트에 등록 된 리시버가 아닌 액티비티 내부에서'registerReceiver()'*를 사용하면 이러한 문제를 해결할 수 있습니다. – CommonsWare

+0

그래, 나 또한 이것을 시도하고 내 활동 수업에 내 방송 수신기를 등록했지만 내 edittext에 액세스 할 수 없을 때까지 .... 나는 지난 2 일에서 그것을 시도하고 있지만 솔루션을 가지고있어 최근에 내 선언해야 해. 그건 그렇고 ... 지원 주셔서 감사합니다 !!! –

+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 –