在android中使用kotlin从BroadcastReceiver类访问edittext的Activity

如果没有互联网连接可用,我想禁用我的edittext字段。 所以,为此,我已经让广播接收者类来检测网络变化活动,当我收到没有互联网连接可用的广播时,当时我想禁用我的编辑文本字段,因为互联网连接是由用户做的字段应该自动启用。 最重要的是,我正在使用kotlin做这件事情,我发现了很多解决方案,但都是针对java的。 所以,请帮助我,我该怎么做。 我曾试图获得像下面的访问edittext的类实例

var activityInstance = SetProfileActivity::class.objectInstance 

并通过使用activityInstance对象,我试图访问我的edittext像下面

 activityInstance.myEtId.setEnabled(false) 

但我无法访问它,它返回null。 我怎样才能做到这一点?

我得到了解决方案….我必须在我的活动类中注册我的接收器,重要的是声明broadcastreceiver类作为内部类访问活动的元素。 例如

 class SetProfileActivity<T> : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_set_profile) try { registerReceiver(NetworkChangeReceiver(), IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)) } catch (e: Exception){ Log.e("JK-->>","Error in registering NetworkChangeReceiver() in SetProfileActivity!! Error-->"+e.toString()) } val intentFilter = IntentFilter("INTERNET ON") registerReceiver(InternetOnReceiver(), intentFilter) val intentFilerInternetOff = IntentFilter("INTERNET OFF") registerReceiver(InternetOffReceiver(), intentFilerInternetOff) val databaseHelper = Databasehelper(applicationContext) databaseHelper.createDataBase() databaseHelper.openDatabase() val date = Date() val date1 = SimpleDateFormat("dd-MM-yyyy").format(date) val time1 = SimpleDateFormat("hh:mm a").format(date) etDatePicker.setText(date1.toString()) etTimePicker.setText(time1) var calender = Calendar.getInstance() var date2: DatePickerDialog.OnDateSetListener = DatePickerDialog.OnDateSetListener { datePicker, i1, i2, i3 -> Unit calender.set(Calendar.YEAR, i1) calender.set(Calendar.MONTH, i2) calender.set(Calendar.DAY_OF_MONTH, i3) var date3 = SimpleDateFormat("dd-MM-yyyy").format(calender.time) etDatePicker.setText(date3) } etDatePicker.setOnClickListener { var datePickerDialog = DatePickerDialog( this@SetProfileActivity, date2, calender.get(Calendar.YEAR), calender.get(Calendar.MONTH), calender.get(Calendar.DAY_OF_MONTH) ) datePickerDialog.datePicker.minDate = System.currentTimeMillis() - 1000 datePickerDialog.show() } var calendar2 = Calendar.getInstance() var time2 = TimePickerDialog.OnTimeSetListener { timePicker, i1, i2 -> Unit calendar2.set(Calendar.HOUR_OF_DAY, i1) calendar2.set(Calendar.MINUTE, i2) if(calendar2.get(Calendar.HOUR_OF_DAY) > 12) { calendar2.set(Calendar.AM_PM, Calendar.PM) } else { calendar2.set(Calendar.AM_PM, Calendar.AM) } var time3 = SimpleDateFormat("hh:mm a").format(calendar2.time) etTimePicker.setText(time3) } etTimePicker.setOnClickListener { TimePickerDialog( this@SetProfileActivity, time2, calendar2.get(Calendar.HOUR_OF_DAY), calendar2.get(Calendar.MINUTE), false ).show() } btSet.setOnClickListener(View.OnClickListener { var setDate: String = etDatePicker.text.toString() var setTime: String = etTimePicker.text.toString() var setType: String = spinner.selectedItem.toString() //Log.e("JK-->>",setDate + setTime + setType) var etLocationValue = etLocationPicker.text.toString() var latitude = etLocationValue.substring(4,9) var longitude = etLocationValue.substring(16,21) var area = etLocationValue.substring(28,31) var tmp = databaseHelper.addProfile(setDate,setTime,setType,latitude,longitude,area) if(tmp == true) { Toast.makeText(applicationContext, "Profile Added!", Toast.LENGTH_SHORT).show() var fireDate = setDate+" "+setTime; var d: Date? = null; val sdf = SimpleDateFormat("dd-MM-yyyy hh:mm a") try { d = sdf.parse(fireDate) } catch (ex: ParseException) { Log.e("JK-->>",ex.toString()) } var strId = System.currentTimeMillis().toString() strId = strId.substring(6,strId.length-1) var _id = strId.toInt() val intent = Intent(applicationContext, AlarmReceiver::class.java) intent.putExtra("type" , setType) val pendingIntent = PendingIntent.getBroadcast( getApplicationContext(), _id, intent, 0) val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager Log.e("mili-->>" ,d!!.getTime().toString()); alarmManager.set(AlarmManager.RTC_WAKEUP, d!!.getTime() , pendingIntent) finish() } else if(tmp == false) { Toast.makeText(applicationContext, "Problem Occurs in setting profile! Try again!", Toast.LENGTH_LONG).show() } }) etLocationPicker.setOnClickListener(View.OnClickListener { var intent = Intent(this@SetProfileActivity, PopupMapActivity::class.java) var selectedItem = spinner.selectedItem.toString() intent.putExtra("selectedItem",selectedItem) startActivity(intent) }) } inner class InternetOnReceiver : BroadcastReceiver(){ override fun onReceive(context: Context?, intent: Intent?) { etLocationPicker.hint = "Pick Location" etLocationPicker.isEnabled = true } } inner class InternetOffReceiver: BroadcastReceiver(){ override fun onReceive(p0: Context?, p1: Intent?) { etLocationPicker.hint = "Internet must be on to use this feature!" etLocationPicker.isEnabled = false } } override fun onStart() { super.onStart() } override fun onStop() { unregisterReceiver(InternetOffReceiver()) unregisterReceiver(InternetOnReceiver()) super.onStop() } override fun onResume() { etLocationPicker.setText("") var location: SharedPreferences = getSharedPreferences("location", Context.MODE_PRIVATE) var markerRadius = location.getString("markerRadius",null) if(markerRadius != null) { var latitude = location.getString("latitude",null) var longitude = location.getString("longitude",null) etLocationPicker.setText("Lat-"+latitude.substring(0,5)+", Long-"+longitude.substring(0,5)+", Area-"+markerRadius+"m") getSharedPreferences("location", Context.MODE_PRIVATE).edit().putString("markerRadius",null).commit() } super.onResume() }}