본문 바로가기
Android/Errors

OptionMenu의 item에 actionLayout 지정 시 onOptionsItemSelected() 미작동

by JuHy_ 2020. 5. 8.

문제점

<?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/menu_sort"
        android:title="sort"
        app:showAsAction="always"
        app:actionLayout="@layout/sort_layout"/>

</menu>

OptionMenu를 구현할 때 item을 icon이 아닌 actionLayout 옵션을 통해 layout을 지정하면,

onOptionsItemSelected()가 호출되지 않아 클릭 시 이벤트를 처리할 수 없음.

 

해결 방법

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_sort, menu);

    for(int i=0; i<menu.size(); i++){
        MenuItem item = menu.getItem(i);
        if(item.getItemId() == R.id.menu_sort){
            View view = item.getActionView();
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    
                    // write code here
                    
                }
            });
        }
    }
    return true;
}

onCreateOptionsMenu()에서 파라미터로 넘어오는 menu를 통해 item들을 가져올 수 있다.

가저온 item들 중 actionLayout을 적용한 item을 찾으면 getActionView()를 통해 가져와 onClickListener를 설정함.