TransWikia.com

Ошибка в Fragment

Stack Overflow на русском Asked on January 4, 2022

Ошибка в Fragment не пойму как исправить, объясните пожалуйста почему в Fragment код работает не так как в Activity

public class Fragment_Menu_list_Tasks_Prapor_1 extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_menu_list_task_prapor_1, container, false);
    }

    @Override
    public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState)
    {
        ImageButton back = requireView().findViewById(R.id.back);
        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Navigation.findNavController(view)
                        .navigate(R.id.action_fragment_Menu_list_Tasks_Prapor_1_to_fragment_Menu_list_Tasks_Prapor);
            }
        });

        final ImageButton quick_menu = requireView().findViewById(R.id.quick_menu);

        quick_menu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                PopupMenu popupMenu = new PopupMenu(Fragment_Menu_list_Tasks_Prapor_1.this, quick_menu);
                popupMenu.getMenuInflater().inflate(R.menu.quick_menu, popupMenu.getMenu());

                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem menuItem) {
                        return false;
                    }
                });
            }
        });
    }
}

Ошибка

error: incompatible types: Fragment_Menu_list_Tasks_Prapor_1 cannot be converted to Context
                PopupMenu popupMenu = new PopupMenu(Fragment_Menu_list_Tasks_Prapor_1.this, quick_menu);

One Answer

Если в активити что-то требует Context, то this передают, потому что активити наследуется от Context. Фрагмент же не наследуется от Context, но его можно получить с помощью метода getContext()

PopupMenu popupMenu = new PopupMenu(getContext(), quick_menu);

Либо контекст можно получить из View, которая приходит в OnClick

PopupMenu popupMenu = new PopupMenu(v.getContext(), quick_menu);

Answered by IR42 on January 4, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP