Не можете вызвать метод пользовательского класса ConstraintLayout? - PullRequest
0 голосов
/ 05 октября 2018

Я хочу создать пользовательский ConstraintLayout, чтобы я мог запускать некоторые функции из действия, в котором оно инициализировано.

У меня есть следующий код:

Сначала инициализировал мое пользовательское представление в макете:

<package.com.app.Main.LavadasView
        android:id="@+id/main_autolavados_lavadas_lavadas_view"
        android:layout_width="0dp"
        android:layout_height="25dp"
...
        />

Это мой пользовательский класс LavadasView, макет ограничения, инициализированный из другого XML-файла:

Java-класс

public class LavadasView extends ConstraintLayout {


    public LavadasView(Context context,AttributeSet attrs) {
        super(context);
//Inflate view from XML layout file
        LayoutInflater inflater =(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.lavadas_view, this);



    }

    public void resetView(){
        //Some ui updates
    }

}

XML-файл LavadasView, просто нормальный макет ограничения:

<?xml version="1.0" encoding="utf-8"?>

    <android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
</android.support.constraint.ConstraintLayout>

И в своей Activity я получаю экземпляр с findViewById mehtod, затем я хочу вызвать функцию resetView, и это дает мне исключение нулевого указателя, связанное с LavadasView:

LavadasView lavadasView = (LavadasView) findViewById(R.id.main_autolavados_lavadas_lavadas_view);

//Call this method later on
        lavadasView.resetView();

ТАК, что я делаю не так?Я посмотрел, и это правильный способ получить экземпляр макета, не так ли?

Спасибо.

1 Ответ

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

Проблема с конструктором вашего LavadasView.Когда ваш Activity надулся, он вызовет конструктор LavadasView(Context context, AttributeSet attrs) в вашем пользовательском макете.В этом конструкторе вам нужно вызвать super(context, attrs) для того, чтобы ConstraintLayout был должным образом раздут, но вы звоните только super(context), поэтому вы получаете NullPointerException.

...