
package com.android.example.mechanics;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.Toast;
public class ActionBarMechanics extends Activity {
MenuItem normalItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem normalItem = menu.add("Normal item");//menu.add()메서드를 통해서는 메뉴 자체에 리스트가 추가 된다.
MenuItem actionItem = menu.add("Action Button 공유^^");//menu.add()메서드를 통해서는 메뉴 자체에 리스트가 추가 된다.
actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);//메뉴자체말고 actionItem객체에 대해 옆에 따로 버튼이 하나 더 생기도록 만든다.
actionItem.setIcon(android.R.drawable.ic_menu_share);//공유 모양의 아이콘으로 actionItem을 설정한다.
actionItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem mi){
Toast.makeText(this, "Selected Item: " + mi.getTitle(),Toast.LENGTH_SHORT).show();
return true;
}
});
this.normalItem = normalItem;
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {//메뉴의 item을 선택했을 때 호출되는 메서드
if (item == normalItem)
Toast.makeText(this, "Selected Item: " + item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
}
}
액션바에 메뉴를 추가하는 것을 공부하고 있습니다. 원래 소스는 onOptionsItemSelected(MenuItem item) 메서드를 이용하여 액션바의 메뉴아이템을 클릭할 경우 Toast를 "Selected Item:" +item.getTitle() 과 같이 띄우도록 되어있었습니다.
여기다가 기존에 배웠던 Listener를 적용시켜서 보려고 했습니다.
actionItem메뉴아이템을 클릭할 경우 OnMenuItemClickListener를 통해 onMenuItemClick()메서드가호출되도록 수정하였고,
normalItem메뉴아이템을 클릭할 경우 onOptionsItemSelected()메서드가 호출되도록 유지하였습니다.
MenuItem actionItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){@오버라이드public boolean onMenuItemClick(MenuItem mi){/*토스트발생*/}})
위와 같이 MenuItem actionItem 이라는 변수에 리스너를 세팅하는데, 왜 아래에 onOptionItemSeclected()에서의 토스트에서는 없었던 에러가 갑자기 발생하는지 잘 모르겠습니다.
에러 내용은
The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (new MenuItem.OnMenuItemClickListener(){}, String, int)
입니다.
대충 해석해보면 Toast.makteText()메서드를 온메뉴아이템리스너에서 적용시킬 수 없다고 하는데 그 이유를 모르겠네요 ㅠㅠ
그냥 일반 버튼에 onClickListener를 적용할때 똑같은 토스트를 적용했을 때는 잘 되었었는데 좀 당황스럽네요
가르쳐주시면 감사하겠습니다!!