프로페셔널 안드로이드2 애플리케이션 개발 4장의 To Do List
To Do List application에 ContextMenu 와 OptionsMenu 추가
ContextMenu는 할 일 목록 길게 누르는 경우 나오는 메뉴로 "목록 삭제 "기능 추가
OptionsMenu는 메뉴키를 눌렀을 때 하단에 나오는 메뉴로 "추가" 와 "취소" 기능 추가
한단 OptionsMenu는 목록의 구성에 따라 취소가 삭제 또는 나타나지 않을 수 있음.
ToDoList.java
[java]
package com.paad.todolist;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
public class ToDoList extends Activity {
	private ArrayList todoItems;
	private ListView myListView;
	private EditText myEditText;
	private ArrayAdapter aa;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
setContentView(R.layout.main);
        myListView = (ListView)findViewById(R.id.myListView);
        myEditText = (EditText)findViewById(R.id.myEditText);
        todoItems = new ArrayList();
        int resID = R.layout.todolist_item;
        aa = new ArrayAdapter(this, resID /*android.R.layout.simple_list_item_1*/, todoItems);
        myListView.setAdapter(aa);
        myEditText.setOnKeyListener(new OnKeyListener(){
        	public boolean onKey(View v, int keyCode, KeyEvent event) {
        		if(event.getAction() == KeyEvent.ACTION_DOWN)
        			if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER){
        				todoItems.add(0, myEditText.getText().toString());
        				myEditText.setText("");
        				aa.notifyDataSetChanged();
        				cancelAdd();
        				return true;
        			}
        		return false;
        	}
        });
        registerForContextMenu(myListView);
    }
    static final private int ADD_NEW_TODO = Menu.FIRST;
    static final private int REMOVE_TODO = Menu.FIRST + 1;
    @Override
    public void onCreateContextMenu(ContextMenu menu,
    								View v,
    								ContextMenu.ContextMenuInfo menuInfo) {
    	super.onCreateContextMenu(menu, v, menuInfo);
    	menu.setHeaderTitle("할 일 아이템 선택");
    	menu.add(0, REMOVE_TODO, Menu.NONE, R.string.remove);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    	super.onCreateOptionsMenu(menu);
    	// 새 메뉴 아이템을 만들어 추가
    	MenuItem itemAdd = menu.add(0, ADD_NEW_TODO, Menu.NONE,
    			R.string.add_new);
    	MenuItem itemRem = menu.add(0, REMOVE_TODO, Menu.NONE,
    			R.string.remove);
    	// 아이콘 할당
    	itemAdd.setIcon(R.drawable.add);
    	itemRem.setIcon(R.drawable.del);
    	// 단축키 할당
    	itemAdd.setShortcut('0', 'a');
    	itemRem.setShortcut('1', 'r');
    	return true;
    }
private boolean addingNew = false;
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
    	super.onPrepareOptionsMenu(menu);
    	int idx = myListView.getSelectedItemPosition();
    	String removeTitle = getString(addingNew ?
    									R.string.cancel : R.string.remove);
    	MenuItem removeItem = menu.findItem(REMOVE_TODO);
    	removeItem.setTitle(removeTitle);
    	removeItem.setVisible(addingNew || idx > -1);
    	return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    	super.onOptionsItemSelected(item);
int index = myListView.getSelectedItemPosition();
    	switch(item.getItemId()){
    		case(REMOVE_TODO): {
    			if(addingNew) {
    				cancelAdd();
    			}else {
    				removeItem(index);
    			}
    			return true;
    		}
    		case(ADD_NEW_TODO): {
    			addNewItem();
    			return true;
    		}
    	}
    	return false;
    }
	@Override
    public boolean onContextItemSelected(MenuItem item) {
    	super.onContextItemSelected(item);
    	switch(item.getItemId()) {
	    	case(REMOVE_TODO): {
	    		AdapterView.AdapterContextMenuInfo menuInfo;
	    		menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
	    		int index = menuInfo.position;
	    		removeItem(index);
	    		return true;
	    	}
    	}
    	return false;
    }
    private void addNewItem() {
		addingNew = true;
		myEditText.setVisibility(View.VISIBLE);
		myEditText.requestFocus();
	}
	private void cancelAdd() {
		addingNew = false;
		myEditText.setVisibility(View.GONE);
	}
	private void removeItem(int index) {
		todoItems.remove(index);
		aa.notifyDataSetChanged();
	}
}
[/java]

'OldStory > Android' 카테고리의 다른 글
| 갤럭시 S2 (0) | 2011.10.22 | 
|---|---|
| ContactPicker (0) | 2011.08.29 | 
| Compass - Ch4 (0) | 2011.07.23 | 
| TodoList -Ch4 (0) | 2011.07.14 | 
| ToDoList (0) | 2011.06.30 |