findViewById во фрагменте - PullRequest
943 голосов
/ 27 июня 2011

Я пытаюсь создать ImageView во фрагменте, который будет ссылаться на элемент ImageView, который я создал в XML для фрагмента.Однако метод findViewById работает, только если я расширяю класс Activity.В любом случае я могу использовать его и во Фрагменте?

public class TestClass extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ImageView imageView = (ImageView)findViewById(R.id.my_image);
        return inflater.inflate(R.layout.testclassfragment, container, false);
    }
}

В методе findViewById есть ошибка, которая гласит, что метод не определен.

Ответы [ 33 ]

1 голос
/ 13 января 2017

Самый простой способ использовать такие вещи - использовать нож для масла. Таким образом, вы можете добавить столько Onclciklisteners просто с помощью @OnClick (), как описано ниже:

public class TestClass extends Fragment {
    @BindView(R.id.my_image) ImageView imageView;
    @OnClick(R.id.my_image)
    public void my_image_click(){
        yourMethod();
    }
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.testclassfragment, container, false);
        ButterKnife.bind(getActivity,view);
        return view;
    }
}
0 голосов
/ 24 апреля 2015

Сроки транзакции после .commit () также могут вызвать эту проблему

У меня возникла та же проблема (не удалось открыть просмотр фрагмента). Причина оказалась в том, что - сразу после (FragmentTransaction) .commit () - представление не было активировано в пользовательском интерфейсе. Нет гарантии , когда , после .commit () транзакция происходит; он только в очереди. Поэтому я добавил (FragmentManager) .executePendingTransactions () , чтобы принудительно выполнить транзакцию. После этого ссылка на представление работает как положено!

0 голосов
/ 07 марта 2017
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.testclassfragment, container, false);
     ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
     return view;
}

Обратите внимание, что если вы используете метод getView(), это может вызвать nullPointerException, потому что он возвращает представление root и будет некоторым представлением после onCreateView() метода.

...