Aufruf einer Klasse in Kotlin

  • Antworten:5
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 308

22.07.2020, 20:16:43 via Website

Hallo zusammen

Ich habe eine Klasse von Java in Kotlin umgeschrieben. Diese Klasse öffnet oder schliesst die Tastatur.

package ch.robbisoft.noteapp

import android.app.Activity
import android.view.inputmethod.InputMethodManager

public class KeyBoard
{
public fun show(activity : Activity){
val imm: InputMethodManager = activity.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY) // show

}

public fun hide(activity : Activity){
    val imm = activity.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.toggleSoftInput(
        InputMethodManager.HIDE_IMPLICIT_ONLY,
        0
    ) // hide
 }

public fun toggle(activity : Activity){
    val imm = activity.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
    if (imm.isActive) {
        hide(activity)
    } else {
        show(activity)
    }
}

}

In Java kann ich die Klasse mit folgendem Code aufrufen

KeyBoard.toggle( this )

Wie funktioniert der Aufruf in Kotlin? Auf jeden Fall geht es nicht wie in Java!

Gruss Renato

Diskutiere mit!
  • Forum-Beiträge: 1.246

22.07.2020, 20:28:16 via Website

Hallo meiner Meinung nach brauchst du den Datentyp Context und nicht Activity.

Dann sollte das mit this auch gehen.

Kommt aber auch immer darauf an wo du dich gerade beim Aufruf befindest und worauf this gerade zeigt. Ob das in dem Moment auch der Context der Activity ist.

Das können wir nicht sehen.

— geändert am 22.07.2020, 20:29:53

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 308

22.07.2020, 20:39:56 via Website

Ciao Jokel

Es geht nicht um das this das sollte so gehen. Aber der Aufruf wird rot unterlegt. Also muss es irgend wie anders gehen.

Gruss Renato

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 308

22.07.2020, 20:46:09 via Website

So geht es

KeyBoard().toggle( this@MainActivity )

Aber ist das auch gut so?

Gruss Renato

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.246

22.07.2020, 20:56:46 via Website

In der Klasse also die Funktion soltest du den Datentyp Context benutzen und nicht Activity.

public fun toggle(activity : Context ){

Context.INPUT_METHOD_SERVICE

Kotlin: Java:

this@MainActivity == MainActivity.this

— geändert am 22.07.2020, 21:04:03

Hilfreich?
Diskutiere mit!
Empfohlene Artikel bei NextPit