Тост работает в Java деятельности, но не kotlin - PullRequest
0 голосов
/ 17 октября 2018

У меня есть собственный тост, и он работает в java-активности, но не в kotlin, в kotlin-деятельности он выдает следующую ошибку:

kotlin.TypeCastException: null cannot be cast to non-null type android.view.ViewGroup 

в этой строке

val layout = inflater.inflate(R.layout.custom_toast,
      findViewById<View>(R.id.custom_toast_container) as ViewGroup)

Вот тост:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_toast_container"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="8dp"
android:background="@color/colorPrimary"
>
<ImageView android:src="@drawable/ic_done_black_24dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="8dp"
    android:tint="@color/colorBackground"
    />
<TextView android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#FFF"
    />

Как я называю это в Java:

LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast,
(ViewGroup) findViewById(R.id.custom_toast_container));
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Already reported");
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.BOTTOM, 0, 145);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();

Как студия android конвертирует это kotlin:

 val inflater = layoutInflater
 val layout = inflater.inflate(R.layout.custom_toast,
 findViewById<View>(R.id.custom_toast_container) as ViewGroup)

 val text = layout.findViewById<View>(R.id.text) as TextView
 text.text = "Already reported"
 val toast = Toast(context)
 toast.setGravity(Gravity.BOTTOM, 0, 145)
 toast.duration = Toast.LENGTH_LONG
 toast.view = layout
 toast.show()

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 17 октября 2018

Я думаю, это из-за того, что findViewById возвращает nullable, но вы можете использовать его как ненулевой тип.Здесь я немного изменил ваш код:

 val inflater = layoutInflater
 val layout = inflater.inflate(R.layout.custom_toast,
 findViewById<View>(R.id.custom_toast_container) as ViewGroup?)

 val text = layout?.findViewById<View>(R.id.text) as TextView?
 text?.text = "Already reported"
 val toast = Toast(context)
 toast.setGravity(Gravity.BOTTOM, 0, 145)
 toast.duration = Toast.LENGTH_LONG
 toast.view = layout
 toast.show()

Надеюсь, это вам поможет.

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