public class MainActivity extends Activity { //대량의 문자열 데이터를 저장할 Arraylist 객체 생성 ArrayList<String> mDatas= new ArrayList<String>(); ListView listview; //ListView 참조변수
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //문자열 데이터 ArrayList에 추가 mDatas.add("KOREA"); mDatas.add("CANADA"); mDatas.add("FRANCE"); mDatas.add("MEXICO"); mDatas.add("POLAND"); mDatas.add("SAUDI ARABIA"); //ListView가 보여줄 뷰를 만들어내는 Adapter 객체 생성 //ArrayAdapter : 문자열 데이터들을 적절한 iew로 1:1로 만들어서 List형태로 ListView에 제공하는 객체 //첫번째 파라미터 : Context객체 ->MainActivity가 Context를 상속했기 때문에 this로 제공 가능 //두번째 파라미터 : 문자열 데이터를 보여줄 뷰. ListView에 나열되는 하나의 아이템 단위의 뷰 모양 //세번째 파라미터 : adapter가 뷰로 만들어줄 대량의 데이터들 //본 예제에서는 문자열만 하나씩 보여주면 되기 때문에 두번째 파라미터의 뷰 모먕은 Android 시스템에서 제공하는 //기본 Layout xml 파일을 사용함. ArrayAdapter adapter= new ArrayAdapter(this, android.R.layout.simple_list_item_1, mDatas); listview= (ListView)findViewById(R.id.listview); listview.setAdapter(adapter); //위에 만들어진 Adapter를 ListView에 설정 : xml에서 'entries'속성 //ListView의 아이템 하나가 클릭되는 것을 감지하는 Listener객체 설정 (Button의 OnClickListener와 같은 역할) listview.setOnItemClickListener(listener); //ListView를 Context 메뉴로 등록 registerForContextMenu(listview); } //Context 메뉴로 등록한 View(여기서는 ListView)가 처음 클릭되어 만들어질 때 호출되는 메소드 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub //res폴더의 menu플더안에 xml로 MenuItem추가하기. //mainmenu.xml 파일을 java 객체로 인플레이트(inflate)해서 menu객체에 추가 getMenuInflater().inflate(R.menu.menu_listview, menu); super.onCreateContextMenu(menu, v, menuInfo); } //Context 메뉴로 등록한 View(여기서는 ListView)가 클릭되었을 때 자동으로 호출되는 메소드 public boolean onContextItemSelected(MenuItem item) { //AdapterContextMenuInfo //AdapterView가 onCreateContextMenu할때의 추가적인 menu 정보를 관리하는 클래스 //ContextMenu로 등록된 AdapterView(여기서는 Listview)의 선택된 항목에 대한 정보를 관리하는 클래스 AdapterContextMenuInfo info= (AdapterContextMenuInfo)item.getMenuInfo(); int index= info.position; //AdapterView안에서 ContextMenu를 보여즈는 항목의 위치 //선택된 ContextMenu의 아이템아이디를 구별하여 원하는 작업 수행 //예제에서는 선택된 ListView의 항목(String 문자열) data와 해당 메뉴이름을 출력함 switch( item.getItemId() ){ case R.id.modify: Toast.makeText(this, mDatas.get(index)+" Modify", Toast.LENGTH_SHORT).show(); break; case R.id.delete: Toast.makeText(this, mDatas.get(index)+" Delete", Toast.LENGTH_SHORT).show(); break; case R.id.info: Toast.makeText(this, mDatas.get(index)+" Info", Toast.LENGTH_SHORT).show(); break; } return true; }; //ListView의 아이템 하나가 클릭되는 것을 감지하는 Listener객체 생성 (Button의 OnClickListener와 같은 역할) OnItemClickListener listener= new OnItemClickListener() { //ListView의 아이템 중 하나가 클릭될 때 호출되는 메소드 //첫번째 파라미터 : 클릭된 아이템을 보여주고 있는 AdapterView 객체(여기서는 ListView객체) //두번째 파라미터 : 클릭된 아이템 뷰 //세번째 파라미터 : 클릭된 아이템의 위치(ListView이 첫번째 아이템(가장위쪽)부터 차례대로 0,1,2,3.....) //네번재 파리미터 : 클릭된 아이템의 아이디(특별한 설정이 없다면 세번째 파라이터인 position과 같은 값) @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub //클릭된 아이템의 위치를 이용하여 데이터인 문자열을 Toast로 출력 Toast.makeText(MainActivity.this, mDatas.get(position), Toast.LENGTH_SHORT).show(); } }; }
|