Aufruf einer Klasse in Kotlin

  • Antworten:5
Robbiani Renato
  • Forum-Beiträge: 669

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

Kommentieren
Jokel
  • Forum-Beiträge: 1.558

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?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 669

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?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 669

22.07.2020, 20:46:09 via Website

So geht es

KeyBoard().toggle( this@MainActivity )

Aber ist das auch gut so?

Gruss Renato

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.558

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?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 669

23.07.2020, 22:05:31 via Website

Danke Jokel für die Hilfe.

Gruss Renato

Hilfreich?
Kommentieren