Позвоните в java-класс из kotlin - PullRequest
0 голосов
/ 10 июня 2018

Я работаю над проектом на Android Studio.У меня есть основное действие внутри файла kotlin (MainActivity.kt), и из него я пытаюсь вызвать статический метод (start_netClient ()) из файла java (dists.java) через объект Intent, поместив этот слушатель для моего bbutton внутри onCreate () MainActivity:

        bbutton.setOnClickListener(object: View.OnClickListener {
        override fun onClick(view: View): Unit {
            // Handler code here.
            val intent = Intent(this, Net_Activity::class.java)
            startActivity(intent)
        }
    })

Net_Activity и его содержимое:

class Net_Activity: AppCompatActivity() {

fun main(args: Array<String>) {
    dists.start_netClient()
}
}

Что я получаю для этого кода во время сборки, так этоэта ошибка в намерении на MainActivity.kt:

Error:(65, 30) None of the following functions can be called with the arguments supplied:
public constructor Intent(p0: Context!, p1: Class<*>!) defined in android.content.Intent
public constructor Intent(p0: String!, p1: Uri!) defined in android.content.Intent

Я относительно новичок во всем Android, но что мне не хватает, и как можно подключить метод Java икласс котлин через интент?Лучше всего использовать два вида деятельности или есть другой подход?

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Кажется, что когда вы используете this, вы ссылаетесь на объект слушателя (View.OnClickListener), а не на свою деятельность.Вы должны быть в состоянии исправить это, используя this@Net_Activity, который ссылается на вашу активность вместо слушателя.Полная строка должна выглядеть так:

val intent = Intent(this@Net_Activity, Net_Activity::class.java)

Когда вы объявляете объект в Kotlin (с помощью ключевого слова object), вы определяете анонимный класс, а затем создаете один экземпляр этого класса.Это позволяет вам переопределять методы для таких вещей, как слушатели, но, как вы обнаружили, это означает, что вы должны дважды проверить использование this.

0 голосов
/ 10 июня 2018

Попробуйте еще раз прочитать основы создания Activity из документации для разработчиков Android. Читать здесь

Kotlin разработан на 100% совместимость с Java.Это означает, что вы можете просто вызвать любой класс Java или методы из Kotlin, и наоборот.Таким образом, вы можете даже сделать Activity на основе Kotlin вместе с деятельностью на основе Java, и это будет хорошо для вас.Хотя я рекомендую вам просто использовать 100% Kotlin, так как его намного легче разрабатывать и читать.

Попробуйте:

  1. Измените Net_Activity на NetActivity,Это намного лучше для глаз.Не забудьте изменить AndroidManifest.xml

  2. Измените setOnClickListener на

    bButton.setOnClickListener {
        // Handler code here.
       val intent = Intent(this, NetActivity::class.java)
       startActivity(intent)
    }
    
  3. У вас есть mainфункционировать в вашем NetActivity как public static void main(String[] args)?Это не то, как ты это делаешь.Вы можете переопределить другой метод Activity, например onCreate(), onResume() и т. Д. Попробуйте прочитать Основы приложения еще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...