NullPointerException при вызове OnClick из Фрагмента

228
25 июля 2022, 02:20

При нажатии на кнопку, определенную во фрагменте выкидывает NullPointerException. Сам фрагмент:


    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";
    private String mParam1;
    private String mParam2;
    public HashFragment() {
        // Required empty public constructor
    }
    public static HashFragment newInstance(String param1, String param2) {
        HashFragment fragment = new HashFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }
    @InjectPresenter
    CalculatorPresenter calculatorPresenter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_hash, container, false);
        Button calculateBtn = (Button) view.findViewById(R.id.calculateBtn);
        Button savingBtn = (Button) view.findViewById(R.id.savingBtn);
        final EditText inputText = (EditText) view.findViewById(R.id.inputEditText);
        final EditText outputText = (EditText) view.findViewById(R.id.outputEditText);
        Spinner algorithmsSpinner = (Spinner) view.findViewById(R.id.algorithmSpinner);
        
        ArrayAdapter<String> mArrayAdapter = new ArrayAdapter<String>(super.getContext(), android.R.layout.simple_list_item_1, ListAlgorithms.values);
        mArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        algorithmsSpinner.setAdapter(mArrayAdapter);
        
        final String[] algorithm = new String[1];
        AdapterView.OnItemSelectedListener onItemSelectedListener = new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                algorithm[0] = (String)parent.getItemAtPosition(position);
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        };
        algorithmsSpinner.setOnItemSelectedListener(onItemSelectedListener);
        calculateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                outputText.setText(calculatorPresenter.calculateOnClick(inputText.getText().toString(), algorithm[0]));
            }
        });
        return view;
    } 

Исключение вылетает конкретно при вызове

calculateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                outputText.setText(calculatorPresenter.calculateOnClick(inputText.getText().toString(), algorithm[0]));
            }

Код активити

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TabLayout tabLayout = findViewById(R.id.tabLayout);
        TabItem tabItem1 = findViewById(R.id.hashItem);
        TabItem tabItem2 = findViewById(R.id.passwordItem);
        final ViewPager viewPager = findViewById(R.id.viewPager2);
        PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(pagerAdapter);
        tabLayout.setupWithViewPager(viewPager);
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

Код адаптера

 private int tabsNums;
    public PagerAdapter(FragmentManager fm, int tabsNums){
        super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
        this.tabsNums = tabsNums;
    }
    @NonNull
    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                return new HashFragment();
            case 1:
                return new PasswordFragment();
            default:
                return  null;
        }
    }
    @Override
    public int getCount() {
        return tabsNums;
    }
    @Override
    public CharSequence getPageTitle(int position) {
        switch (position){
            case 0:
                return "Hash Calculator";
            case 1:
                return "Password Generator";
            default:
                return  null;
        }
    }

В первый раз работаю с фрагментами, возможно взаимодействие пользователя с UI фрагмента должно обрабатываться активити? Заранее спасибо

READ ALSO
Почему изменяется массив?

Почему изменяется массив?

У меня есть уже заполненный массив basePlan (те

217
Как реализовать код задачи?

Как реализовать код задачи?

Нужно решить задачу, условие которой звучит так:

240
Некорректная работа SwitchButton в ViewHolder-e itemView в recyclerView. (Room)

Некорректная работа SwitchButton в ViewHolder-e itemView в recyclerView. (Room)

Почему-то SwitchButton-ы в item-ах в recyclerView работают некорректноПри переключении - иногда переключается не только тот, который переключаю, но и еще...

203
BottomNavigationView и Fragment. Как сохранить состояние?

BottomNavigationView и Fragment. Как сохранить состояние?

Есть BottomNavigationView и 3 Fragment'аФрагмент "Home" содержит ScrollView

245