Вызов метода фрагмента в действии вызывает исключение нулевого указателя

Я хочу вызвать метод фрагмента, когда я нажимаю кнопку FloatingActionButton.
Я использую Butterknife.

Ошибка:

PID: 9956 java.lang.NullPointerException: попытка вызвать виртуальный метод void com.fischerdaniel.testapp.FirstFragment.setTvText () для ссылки на нулевой объект

Часть MainActicity:

  @OnClick({R.id.fab_one, R.id.fab_two, R.id.fab_three}) public void test(View view) {
        switch (view.getId()) {
            case R.id.fab_three:
                FirstFragment firstFragment = (FirstFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_first);
                firstFragment.setTvText();
                break;
            default:
                break;
        }
    }

Часть фрагмента:

    @BindView(R.id.et_one) EditText etOne;
    @BindView(R.id.et_two) EditText etTwo;
    @BindView(R.id.tv_one) TextView tvOne;
    @BindView(R.id.tv_two) TextView tvTwo;

    private Unbinder unbinder;

   @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_first, container, false);
        unbinder = ButterKnife.bind(this, view);

        return view;
    }

    protected void setTvText() {
        tvOne.setText(etOne.getText());
        tvTwo.setText(etTwo.getText());
    }

person Daniel Fischer    schedule 04.03.2017    source источник
comment
Вы называете это по ссылке   -  person Hamza    schedule 05.03.2017


Ответы (3)


См. Эту ссылку: findFragmentById всегда возвращает значение null

Когда вы создаете свой фрагмент, используйте:

add(int id, Fragment fragment, String tag) 

а затем, чтобы получить фрагмент, используйте:

findFragmentByTag(String tag)
person Caleb    schedule 04.03.2017
comment
фрагмент находится в окне просмотра - person Daniel Fischer; 04.03.2017

Вызовите свой метод фрагмента из Activity, как показано ниже,

это сработало для меня

FirstFragment firstFragment =(FirstFragment)getSupportFragmentManager().getFragments().get(0); 

firstFragment.yourmethod();

Здесь 0 - позиция вашего фрагмента.

person Abhishek Nayak    schedule 16.12.2020

person    schedule
comment
Выглядит подробно, но можно использовать пояснительный текст. См. Как написать хороший ответ?. - person Cheticamp; 04.03.2017
comment
фрагмент находится в окне просмотра - person Daniel Fischer; 04.03.2017