예전 글들/Android

Menu 추가하는 신기한 방법(?)

fromleaf 2011. 4. 19. 13:57
반응형

옆화면 처럼 메뉴를 띄우는 방법 중에 복잡한 듯하면서 왠지 모르게 좋아보이는 소스를 발견!!

우선 처음 호출되는 클래스는 ch8ShapeShifter 클래스로 내용은

public class ch8ShapeShifter extends Menu {
 @Override
 void prepareMenu() {
  addMenuItem("Tweened Animation", TweenActivity.class);
  addMenuItem("Tweened Animation - Layout", TweenLayoutActivity.class);
  addMenuItem("Frame-By-Frame Animation - ImageView Background", FrameAnimationActivity.class);
  addMenuItem("Frame-By-Frame Animation - ImageSwitcher", FrameAnimationActivity2.class);
  addMenuItem("Shape Viewer", ShapeViewer.class);
 }
}

아쉽게도 글에 색이 추가가 안되서 쩝;; 어쨌든 prepareMenu() 함수는 Menu클래스로부터 adstract 선언된 함수로 extends 됐으니 무조건 구현해야겠죠???

아래는 Menu 클래스 소스임돠~

public abstract class Menu extends ListActivity {
 private SortedMap<String, Object> actions = new TreeMap<String, Object>();
 
 @Override
 protected void onListItemClick(ListView l, View v, int position, long id){
  String key = (String) l.getItemAtPosition(position);
  startActivity((Intent)actions.get(key));
 }
 
 // Called when the activity is first created
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  
  prepareMenu();
  
  String[] keys = actions.keySet().toArray(new String[actions.keySet().size()]);
  
  setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, keys));
  
 }
 
 public void addMenuItem(String label, Class<?> cls) {
  actions.put(label, new Intent(this, cls));
 }

 
 abstract void prepareMenu();
}

왜 이렇게 복잡하게 짤까 생각해보니 이렇게 만들어 놓으면 나중에 메뉴 추가할 때 편하지 않으려나??
이리 짜면 어떤 장점이 있을지는 모르겠지만 배울 점이 많은 듯하여 올려놓습니다~

반응형