java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.widget.ImageView.setImageResource (int)' для ссылки на пустой объект - PullRequest
0 голосов
/ 27 октября 2018

Я работаю со сворачивающимся параллаксом, внутри компоновки координат у меня есть элемент с id: imageViewTest, который находится в этом файле: activity_company_detail.xml

<android.support.design.widget.AppBarLayout
    ...>

    <android.support.design.widget.CollapsingToolbarLayout
        ...
        >

        <ImageView
                android:id="@+id/imageViewTest"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:srcCompat="@android:color/darker_gray"
                tools:ignore="ContentDescription"/>

    <android.support.v7.widget.Toolbar
        .../>

    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_company_detail"/>

В классе фрагмента я пытаюсь вызвать этот элемент R.id.imageViewTest через метод view.findViewById (...), этот элемент находится в активности этого фрагмента , необходимо программно изменить егофункциональность.CompanyDetailActivityFragment.java

private View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
....
view = inflater.inflate(R.layout.fragment_company_detail, container, false);
ImageView  imageViewPrueba = (ImageView)view.findViewById(R.id.imageViewTest);
imageViewPrueba.setImageResource(R.mipmap.ic_logo_promo);
...
}

При попытке использовать этот элемент я получаю следующую ошибку: Причина: java.lang.NullPointerException: Попытка вызвать виртуальный метод void android.widget.ImageView.setImageResource (int)'для пустой ссылки на объект`

Попробуйте с getActivity.findViewById (), но я все еще в проблеме

Извините за мой английский.

Спасибо за помощь @Кирил-Ткач.

Разрешено :

В деятельности: CompanyDetailActivity.java

public void setImageDrawable(){
    ImageView  imageViewPrueba = (ImageView) findViewById(R.id.imageViewPrueba);
    imageViewPrueba.setImageDrawable(...));
}

Во фрагменте: CompanyDetailActivityFragment.java

@Override
public View onCreateView(){
...
((CompanyDetailActivity)getActivity()).setImageDrawable();
...
}

1 Ответ

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

Вы не можете сделать это, потому что это не в вашем макете фрагментов. Посмотрите на ваш метод: view.findViewById(R.id.imageViewPrueba);. Вы просматриваете его в своем представлении объекте, который имеет макет @layout/content_company_detail, и он ничего не знает о своей деятельности. Все, что вам нужно сделать, это создать метод в вашей активности setImageResource и вызвать его из вашего фрагмента. Просто помните, что ваш фрагмент должен работать только с собственными представлениями, и для работы с другими представлениями лучше всего вызывать методы других действий и фрагментов.

...