마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

BottomNavigation

0 추천
Fragment 로 제작된 탭으로 각각의 탭별로 서로 다른 bottomNav를 가지고 있습니다.

그런데 onOptionsItemSelected 가 작동되지 않습니다...  .ㅠㅠ

소스첨부합니다.

자바소스 ============================

     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        setHasOptionsMenu(true);
        return inflater.inflate(R.layout.fragment_second_tab, container, false);
    }
   
    @Override
    public void onResume() {
        super.onResume();
        getActivity().invalidateOptionsMenu();
    }

    @Override
    public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
        inflater.inflate(R.menu.menu_bottom_ncmanager, menu);
        for (int i = 0; i < menu.size(); i++) {
            MenuItem item = menu.getItem(i);
            SpannableString spanString = new SpannableString(menu.getItem(i).getTitle().toString());
            spanString.setSpan(new ForegroundColorSpan(Color.BLACK), 0, spanString.length(), 0); //fix the color to white
            item.setTitle(spanString);
        }
        super.onCreateOptionsMenu(menu, inflater);
    }

 

@Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {    <<< 작동안함...  .ㅠㅠ    
        if(item.getItemId() == R.id.get_ncPhoto){
            txt_test.setText("get_ncPhoto");
            Toast.makeText(getActivity(), "get_ncPhoto", Toast.LENGTH_LONG).show();
        }else if(item.getItemId() == R.id.get_ncFromQR){
            Toast.makeText(getActivity(), "get_ncFromQR", Toast.LENGTH_LONG).show();
        }else if(item.getItemId() == R.id.ncSearch){
            Toast.makeText(getActivity(), "ncSearch", Toast.LENGTH_LONG).show();
        }
        return true;
    }

 

레이아웃 소스 =========================

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".Second_tab">

    <TextView
        android:id="@+id/tv_test"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="Second Tab"
        android:textSize="30sp" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        app:labelVisibilityMode="labeled"
        app:itemBackground="@color/white"
        app:menu="@menu/menu_bottom_ncmanager"/>

</FrameLayout>

 

메뉴 소스 =====================

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    >

    <item
        android:id="@+id/get_ncPhoto"
        android:enabled="true"
        android:icon="@drawable/camera"
        android:title="등록"
        app:showAsAction="always"/>

    <item
        android:id="@+id/get_ncFromQR"
        android:enabled="true"
        android:icon="@drawable/qr_code"
        android:title="가져오기"
        app:showAsAction="always"/>

    <item
        android:id="@+id/ncSearch"
        android:enabled="true"
        android:icon="@drawable/manage_search"
        android:title="찾기"
        app:showAsAction="always"/>
</menu>

원인을 알수 있을까요?...
jsb (120 포인트) 님이 2023년 7월 8일 질문
혹시 질문에서
Fragment 로 제작된 탭으로 각각의 탭별로 서로 다른 bottomNav를 가지고 있습니다.

bottomNav가 아니라 OptionsMenu 아닌가요?
음...  그렇죠...  제가 시작한지 얼마안되어 정확하게 질문이 되지 못한거 같네요...

fragment 레이아웃에서
   <com.google.android.material.bottomnavigation.BottomNavigationView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        app:labelVisibilityMode="labeled"
        app:itemBackground="@color/white"
        app:menu="@menu/menu_bottom_ncmanager"/>
이렇게 메뉴를 추가햇어요...

근데...
onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) 가 작동이 안되는거 같아요...

1개의 답변

0 추천

BottomNavigation이랑 OptionsMenu는 다른 뷰인데 같은 메뉴 레이아웃을 사용하고 계시네요. 의도된 건지 아니면 실수를 하신 건지 모르겠지만요.
BottomNavigation은 OptionsMenu와 다른 리스너를 사용해야 합니다.

https://developer.android.com/reference/com/google/android/material/navigation/NavigationBarView#setOnItemSelectedListener(com.google.android.material.navigation.NavigationBarView.OnItemSelectedListener)

 

 <com.google.android.material.bottomnavigation.BottomNavigationView 
        android:id="@+id/bottomNavigationView"
        .../>


// Fragment 
@Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ...

        BottomNavigationView bottomNavigationView = view.findViewById(R.id.bottomNavigationView);
        bottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                if(item.getItemId() == R.id.get_ncPhoto){
                    txt_test.setText("get_ncPhoto");
                    Toast.makeText(requireContext(), "get_ncPhoto", Toast.LENGTH_LONG).show();
                } else if(item.getItemId() == R.id.get_ncFromQR){
                    Toast.makeText(requireContext(), "get_ncFromQR", Toast.LENGTH_LONG).show();
                } else if(item.getItemId() == R.id.ncSearch){
                    Toast.makeText(requireContext(), "ncSearch", Toast.LENGTH_LONG).show();
                }

                return true;
            }
        });
    }

 

spark (227,530 포인트) 님이 2023년 7월 9일 답변
spark님이 2023년 7월 9일 수정
아... 감사합니다...
제가 뻘짓을 하고 있엇군요...
시작한지 얼마안되어서...
이제 알겟어요....  작동 잘 됩니다...

누군가 한마디 해주시는게 이렇게 도움이 됩니다...

너무나 감사합니다..  .^^;;
...