Adapter View List View List View v v

  • Slides: 111
Download presentation
Adapter View

Adapter View

List. View

List. View

List. View v 프로젝트 생성 v activity_main. xml 파일 수정 <? xml version="1. 0"

List. View v 프로젝트 생성 v activity_main. xml 파일 수정 <? xml version="1. 0" encoding="utf-8"? > <Linear. Layout xmlns: android="http: //schemas. android. com/apk/res/android" android: orientation="vertical" android: layout_width="match_parent" android: layout_height="match_parent" > <List. View android: id="@+id/list. View" android: layout_width="match_parent" android: layout_height="match_parent" /> </Linear. Layout>

List. View v Main. Activity. java 파일의 on. Create 메소드 수정 @Override protected void

List. View v Main. Activity. java 파일의 on. Create 메소드 수정 @Override protected void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_main); String[] ar = {"박찬호", "김병현", "서재응", "봉중근", "류현진"}; /* Array. List<String> ar = new Array. List<String>(); ar. add("박찬호"); ar. add("김병현"); ar. add("서재응"); ar. add("봉중근"); ar. add("류현진"); */ // 어댑터 준비 Array. Adapter<String> adapter = new Array. Adapter<String>(this, android. R. layout. simple_list_item_1, ar); // 어댑터 연결 List. View list. View = (List. View)find. View. By. Id(R. id. list. View); list. View. set. Adapter(adapter); }

List. View

List. View

List. View v values 폴더에 arrays. xml 파일 추가 <? xml version="1. 0" encoding="utf-8"?

List. View v values 폴더에 arrays. xml 파일 추가 <? xml version="1. 0" encoding="utf-8"? > <resources> <string-array name="pl"> <item>Machine. Language</item> <item>Assembly</item> <item>C& C++</item> <item>Python</item> <item>Java. Script</item> <item>C#</item> <item>Objective-C</item> <item>Swift</item> <item>Kotlin</item> <item>R</item> <item>Scala</item> <item>Go</item> <item>Closure</item> <item>Ruby</item> </string-array> </resources>

List. View v Main. Activity. java 파일의 on. Create 메소드 수정 protected void on.

List. View v Main. Activity. java 파일의 on. Create 메소드 수정 protected void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_main); Array. Adapter<Char. Sequence> adapter = Array. Adapter. create. From. Resource(this, R. array. MLBPlayer, android. R. layout. simple_list_item_1); // 어댑터 연결 List. View list. View = (List. View)find. View. By. Id(R. id. list. View); list. View. set. Adapter(adapter); }

List. View

List. View

List. View v Main. Activity. java 파일의 on. Create 메소드 수정 protected void on.

List. View v Main. Activity. java 파일의 on. Create 메소드 수정 protected void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_main); Array. Adapter<Char. Sequence> adapter = Array. Adapter. create. From. Resource(this, R. array. MLBPlayer, android. R. layout. simple_list_item_1); // 어댑터 연결 List. View list. View = (List. View)find. View. By. Id(R. id. list. View); list. View. set. Adapter(adapter); list. View. set. Choice. Mode(List. View. CHOICE_MODE_SINGLE); list. View. set. Divider(new Color. Drawable(Color. RED)); list. View. set. Divider. Height(2); }

List. View v 실행 가능한 Activity 생성(Single. Activity) v activity_single. xml 파일 수정 <?

List. View v 실행 가능한 Activity 생성(Single. Activity) v activity_single. xml 파일 수정 <? xml version="1. 0" encoding="utf-8"? > <Linear. Layout xmlns: android="http: //schemas. android. com/apk/res/android" android: layout_width="match_parent" android: layout_height="match_parent" android: orientation="vertical" >

List. View <Linear. Layout android: layout_width="match_parent" android: layout_height="wrap_content" android: orientation="horizontal" > <Edit. Text android:

List. View <Linear. Layout android: layout_width="match_parent" android: layout_height="wrap_content" android: orientation="horizontal" > <Edit. Text android: id="@+id/newitem" android: layout_width="0 px" android: layout_height="wrap_content" android: layout_weight="4" /> <Button android: id="@+id/add" android: layout_width="0 px" android: layout_height="wrap_content" android: layout_weight="3" android: text="Add" /> <Button android: id="@+id/delete" android: layout_width="0 px" android: layout_height="wrap_content" android: layout_weight="3" android: text="Delete" /> </Linear. Layout>

List. View <List. View android: id="@+id/list. View" android: layout_width="match_parent" android: layout_height="match_parent" /> </Linear. Layout>

List. View <List. View android: id="@+id/list. View" android: layout_width="match_parent" android: layout_height="match_parent" /> </Linear. Layout>

List. View v Single. Activity. java 파일 수정 public class Single. Activity extends Activity

List. View v Single. Activity. java 파일 수정 public class Single. Activity extends Activity { List<String> data; Array. Adapter<String> adapter; List. View list. View; @Override protected void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_main); //Model의 역할을 하는 데이터 생성 data = new Array. List<String>(); data. add("Oracle"); data. add("My. SQL"); data. add("Mongo. DB");

List. View //Controller 역할을 하는 Adapter 객체 생성 adapter = new Array. Adapter<String>( this,

List. View //Controller 역할을 하는 Adapter 객체 생성 adapter = new Array. Adapter<String>( this, android. R. layout. simple_list_item_single_choice, data); //View의 역할을 하는 List. View 만들기 list. View = (List. View)find. View. By. Id(R. id. list. View); list. View. set. Adapter(adapter); list. View. set. Choice. Mode(List. View. CHOICE_MODE_SINGLE);

List. View //list에서 항목을 선택했을 때 호출되는 메소드 설정 list. View. set. On. Item.

List. View //list에서 항목을 선택했을 때 호출되는 메소드 설정 list. View. set. On. Item. Click. Listener(new Adapter. View. On. Item. Click. Listener() { @Override //첫번째 매개변수는 이벤트가 발생한 List. View //두번째 매개변수는 이벤트가 발생한 항목 뷰 //세번째 매개변수는 이벤트가 발생한 인덱스 //네번째 매개변수는 이벤트가 발생한 항목 뷰의 아이디 public void on. Item. Click( Adapter. View<? > parent, View view, int position, long id) { //Toast로 선택한 데이터를 출력 String item = data. get(position); Toast. make. Text( Single. Activity. this, item, Toast. LENGTH_LONG). show(); } });

List. View //add 버튼을 눌렀을 때 new. Item에 입력된 문자열을 List. View에 추가 Button

List. View //add 버튼을 눌렀을 때 new. Item에 입력된 문자열을 List. View에 추가 Button add = (Button)find. View. By. Id(R. id. add); add. set. On. Click. Listener(new Button. On. Click. Listener() { @Override public void on. Click(View v) { Edit. Text new. Item = (Edit. Text)find. View. By. Id(R. id. newitem); String item = new. Item. get. Text(). to. String(); if(item != null && item. trim(). length() > 0){ data. add(item. trim()); //데이터가 갱신되었다는 사실을 리스트뷰에게 통보 //List. View를 다시 출력합니다. adapter. notify. Data. Set. Changed(); new. Item. set. Text(""); } } });

List. View //delete 버튼을 눌렀을 때 선택된 항목 지우기 Button delete = (Button)find. View.

List. View //delete 버튼을 눌렀을 때 선택된 항목 지우기 Button delete = (Button)find. View. By. Id(R. id. delete); delete. set. On. Click. Listener(new View. On. Click. Listener() { @Override public void on. Click(View v) { //체크된 항목 가져오기 int pos = list. View. get. Checked. Item. Position(); if(pos>=0 && pos<data. size()){ data. remove(pos); //선택된 것 해제 list. View. clear. Choices(); adapter. notify. Data. Set. Changed(); } } }); } }

List. View v 실행 가능한 Activity 추가(Multi. Activity) v 디자인은 이전과 동일

List. View v 실행 가능한 Activity 추가(Multi. Activity) v 디자인은 이전과 동일

List. View v Multi. Activity. java 파일 수정 public class Multi. Activity extends App.

List. View v Multi. Activity. java 파일 수정 public class Multi. Activity extends App. Compat. Activity { List<String> data; Array. Adapter<String> adapter; List. View list. View;

List. View v Multi. Activity. java 파일 수정 @Override protected void on. Create(Bundle saved.

List. View v Multi. Activity. java 파일 수정 @Override protected void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_multi); //Model의 역할을 하는 데이터 생성 data = new Array. List<String>(); data. add("HTML"); data. add("CSS"); data. add("Java. Script"); //Controller 역할을 하는 Adapter 객체 생성 adapter = new Array. Adapter<String>(this, android. R. layout. simple_list_item_multiple_choice, data); //View의 역할을 하는 List. View 만들기 list. View = (List. View)find. View. By. Id(R. id. list. View); list. View. set. Adapter(adapter); list. View. set. Choice. Mode(List. View. CHOICE_MODE_MULTIPLE);

List. View v Multi. Activity. java 파일 수정 //list에서 항목을 선택했을 때 호출되는 메소드

List. View v Multi. Activity. java 파일 수정 //list에서 항목을 선택했을 때 호출되는 메소드 설정 list. View. set. On. Item. Click. Listener(new Adapter. View. On. Item. Click. Listener() { @Override //첫번째 매개변수는 이벤트가 발생한 List. View //두번째 매개변수는 이벤트가 발생한 항목 뷰 //세번째 매개변수는 이벤트가 발생한 인덱스 //네번째 매개변수는 이벤트가 발생한 항목 뷰의 아이디 public void on. Item. Click( Adapter. View<? > parent, View view, int position, long id) { //Toast로 선택한 데이터를 출력 String item = data. get(position); Toast. make. Text( Multi. Activity. this, item, Toast. LENGTH_LONG). show(); } });

List. View v Multi. Activity. java 파일 수정 //add 버튼을 눌렀을 때 new. Item에

List. View v Multi. Activity. java 파일 수정 //add 버튼을 눌렀을 때 new. Item에 입력된 문자열을 List. View에 추가 Button add = (Button)find. View. By. Id(R. id. add); add. set. On. Click. Listener(new Button. On. Click. Listener() { @Override public void on. Click(View v) { Edit. Text new. Item = (Edit. Text)find. View. By. Id(R. id. newitem); String item = new. Item. get. Text(). to. String(); if(item != null && item. trim(). length() > 0){ data. add(item. trim()); //데이터가 갱신되었다는 사실을 리스트뷰에게 통보 //List. View를 다시 출력합니다. adapter. notify. Data. Set. Changed(); new. Item. set. Text(""); } } });

List. View v Multi. Activity. java 파일 수정 //delete 버튼을 눌렀을 때 선택된 항목

List. View v Multi. Activity. java 파일 수정 //delete 버튼을 눌렀을 때 선택된 항목 지우기 Button delete = (Button)find. View. By. Id(R. id. delete); delete. set. On. Click. Listener(new View. On. Click. Listener() { @Override public void on. Click(View v) { Sparse. Boolean. Array sb = list. View. get. Checked. Item. Positions(); if (sb. size() != 0) { for (int i = list. View. get. Count() - 1; i >= 0 ; i--) { if (sb. get(i)) { data. remove(i); } } list. View. clear. Choices(); adapter. notify. Data. Set. Changed(); } } }); } }

List. View

List. View

List. View v 실행 가능한 Activity 추가(Multiline. Activity) v activity_multiline. xml 파일 수정 <?

List. View v 실행 가능한 Activity 추가(Multiline. Activity) v activity_multiline. xml 파일 수정 <? xml version="1. 0" encoding="utf-8"? > <Linear. Layout xmlns: android="http: //schemas. android. com/apk/res/android" android: orientation="vertical" android: layout_width="match_parent" android: layout_height="match_parent" > <List. View android: id="@+id/list. View" android: layout_width="match_parent" android: layout_height="match_parent" /> </Linear. Layout>

List. View v Multiline. Activity 수정 public class Multiline. Activity extends App. Compat. Activity

List. View v Multiline. Activity 수정 public class Multiline. Activity extends App. Compat. Activity { List<Map<String, String>> list; Array. Adapter<String> adapter; List. View list. View; @Override protected void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_multiline);

List. View v Multiline. Activity 수정 list = new Array. List<>(); Map<String, String> map

List. View v Multiline. Activity 수정 list = new Array. List<>(); Map<String, String> map = new Hash. Map<>(); map. put("subject", "JSP&Servlet"); map. put("description", "Java Web Programming"); list. add(map); map = new Hash. Map<>(); map. put("subject", "Spring"); map. put("description", "Java Framework"); list. add(map); map = new Hash. Map<>(); map. put("subject", "Android"); map. put("description", "Smart. Phone SDK"); list. add(map); map = new Hash. Map<>(); map. put("subject", "i. OS"); map. put("description", "Smart. Phone SDK"); list. add(map);

List. View v Multiline. Activity 수정 Simple. Adapter adapter = new Simple. Adapter(this, list,

List. View v Multiline. Activity 수정 Simple. Adapter adapter = new Simple. Adapter(this, list, android. R. layout. simple_list_item_2, new String[]{"subject", "description"}, new int[]{android. R. id. text 1, android. R. id. text 2}); // 어댑터 연결 list. View = (List. View)find. View. By. Id(R. id. list. View); list. View. set. Adapter(adapter); } }

List. View

List. View

List. View v 실행 가능한 Activity 추가(Cusor. List) v activity_cursor_list. xml 파일에 화면 디자인

List. View v 실행 가능한 Activity 추가(Cusor. List) v activity_cursor_list. xml 파일에 화면 디자인 – List. View 2개 배치 <? xml version="1. 0" encoding="utf-8"? > <Linear. Layout xmlns: android="http: //schemas. android. com/apk/res/android" xmlns: app="http: //schemas. android. com/apk/res-auto" xmlns: tools="http: //schemas. android. com/tools" android: layout_width="match_parent" android: layout_height="match_parent" android: orientation="vertical"> <Text. View android: layout_width="match_parent" android: layout_height="wrap_content" android: text="Simple. Adapter" android: text. Style="bold" /> <List. View android: id="@+id/main_listview_simple" android: layout_width="match_parent" android: layout_height="wrap_content"/>

List. View v activity_cursor_list. xml 파일에 화면 디자인 – List. View 2개 배치 <Text.

List. View v activity_cursor_list. xml 파일에 화면 디자인 – List. View 2개 배치 <Text. View android: layout_width="match_parent" android: layout_height="wrap_content" android: text="Cursor. Adapter" android: text. Style="bold" /> <List. View android: id="@+id/main_listview_cursor" android: layout_width="match_parent" android: layout_height="wrap_content"/> </Linear. Layout>

List. View v 데이터베이스 사용을 위한 Job. DBHelper 클래스를 생성 public class Job. DBHelper

List. View v 데이터베이스 사용을 위한 Job. DBHelper 클래스를 생성 public class Job. DBHelper extends SQLite. Open. Helper { public static final int DATABASE_VERSION=1; public Job. DBHelper(Context context){ super(context, "jobdb", null, DATABASE_VERSION); } @Override public void on. Create(SQLite. Database db) { String table. Sql="create table job_data ("+ "_id integer primary key autoincrement, " + "name text not null, " + "content text)"; db. exec. SQL(table. Sql); db. exec. SQL("insert into job_data (name, content) values db. exec. SQL("insert into job_data (name, content) values } ('SI', '외부 시스템 개발')"); ('SM', '시스템 유지 보수')"); ('QA', '품질 관리 및 테스트')"); ('Back-End', '서버 프로그램 개발')"); ('Front-End', '클라이언트 프로그램 개발')"); ('Full-Stack', '애플리케이션 전체 개발')"); ('Dev. Ops', '개발환경 과 운영환경 구축')");

List. View @Override public void on. Upgrade(SQLite. Database db, int old. Version, int new.

List. View @Override public void on. Upgrade(SQLite. Database db, int old. Version, int new. Version) { if(new. Version == DATABASE_VERSION){ db. exec. SQL("drop table job_data"); on. Create(db); } } }

List. View v Cursor. List. Activity의 on. Create 메소드 수정 @Override protected void on.

List. View v Cursor. List. Activity의 on. Create 메소드 수정 @Override protected void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_cursor_list); List. View title. View = (List. View) find. View. By. Id(R. id. main_listview_simple); List. View cursor. View = (List. View) find. View. By. Id(R. id. main_listview_cursor); List<Map<String, String>> job. Data = new Array. List<>(); Job. DBHelper helper = new Job. DBHelper(this); SQLite. Database db = helper. get. Readable. Database(); Cursor cursor = db. raw. Query("select * from job_data", null); while (cursor. move. To. Next()) { Hash. Map<String, String> map = new Hash. Map<>(); map. put("name", cursor. get. String(1)); map. put("content", cursor. get. String(2)); job. Data. add(map); }

List. View v Cursor. List. Activity의 on. Create 메소드 수정 Simple. Adapter title. Adapter

List. View v Cursor. List. Activity의 on. Create 메소드 수정 Simple. Adapter title. Adapter = new Simple. Adapter(this, job. Data, android. R. layout. simple_list_item_2, new String[]{"name", "content"}, new int[]{android. R. id. text 1, android. R. id. text 2}); title. View. set. Adapter(title. Adapter); Cursor. Adapter cursor. Adapter = new Simple. Cursor. Adapter(this, android. R. layout. simple_list_item_2, cursor, new String[]{"name", "content"}, new int[]{android. R. id. text 1, android. R. id. text 2}, Cursor. Adapter. FLAG_REGISTER_CONTENT_OBSERVER); cursor. View. set. Adapter(cursor. Adapter); }

사용자 정의 항목 뷰 v 사용자 정의 Activity 추가(Custom. Content. View. Activity) v activity_custom_content_view.

사용자 정의 항목 뷰 v 사용자 정의 Activity 추가(Custom. Content. View. Activity) v activity_custom_content_view. xml파일 수정 <? xml version="1. 0" encoding="utf-8"? > <Linear. Layout xmlns: android="http: //schemas. android. com/apk/res/android" android: layout_width="match_parent" android: layout_height="match_parent" android: orientation="vertical" > <List. View android: id="@+id/list. View" android: layout_width="match_parent" android: layout_height="match_parent" /> </Linear. Layout>

사용자 정의 항목 뷰 v layout 디렉토리에 icontext. xml 파일 생성 <? xml version="1.

사용자 정의 항목 뷰 v layout 디렉토리에 icontext. xml 파일 생성 <? xml version="1. 0" encoding="utf-8"? > <Relative. Layout xmlns: android="http: //schemas. android. com/apk/res/android" android: layout_width="match_parent" android: layout_height="60 dip" android: padding="5 dip"> <Image. View android: id="@+id/img" android: layout_width="wrap_content" android: layout_height="wrap_content" android: layout_center. Vertical="true" android: layout_align. Parent. Left="true" /> <Text. View android: id="@+id/text" android: layout_width="wrap_content" android: layout_height="wrap_content" android: text. Color="#00 ff 00" android: text. Size="26 sp" android: layout_center. Vertical="true" android: layout_to. Right. Of="@id/img" />

사용자 정의 항목 뷰 <Button android: id="@+id/btn" android: layout_width="wrap_content" android: layout_height="wrap_content" android: layout_center. Vertical="true"

사용자 정의 항목 뷰 <Button android: id="@+id/btn" android: layout_width="wrap_content" android: layout_height="wrap_content" android: layout_center. Vertical="true" android: layout_align. Parent. Right="true" android: text="상세보기" /> </Relative. Layout>

사용자 정의 항목 뷰 v List. View에 출력할 항목을 나타내는 VO 클래스 생성 import

사용자 정의 항목 뷰 v List. View에 출력할 항목을 나타내는 VO 클래스 생성 import java. io. Serializable; //VO(Variable Object, DTO(Data Transfer Object)) //사용자의 데이터를 표현하기 위한 클래스 //필요한 변수 선언, 접근자 메소드(getter, setter), to. String(디버깅) //상황에 따라 Serializable(직렬화-객체 단위 전송 가능) 인터페이스 implements public class VO implements Serializable { //이미지의 아이디를 저장할 변수 int icon; //출력할 텍스트를 저장할 변수 String name; public int get. Icon() { return icon; } public void set. Icon(int icon) { this. icon = icon; }

사용자 정의 항목 뷰 public String get. Name() { return name; } public void

사용자 정의 항목 뷰 public String get. Name() { return name; } public void set. Name(String name) { this. name = name; } @Override public String to. String() { return "VO [icon=" + icon + ", name=" + name + "]"; } }

사용자 정의 항목 뷰 v List. View에 출력될 데이터와 뷰를 연결 시켜 줄 어댑터

사용자 정의 항목 뷰 v List. View에 출력될 데이터와 뷰를 연결 시켜 줄 어댑터 클래스 생성 public class My. Adapter extends Base. Adapter { //뷰를 출력할 때 필요한 Context(문맥-어떤 작업을 하기 위해 필요한 정보를 저장한 객체) 변수 Context context; //List. View에 출력할 데이터 List<VO> data; //항목 뷰에 해당하는 레이아웃의 아이디를 저장할 변수 int layout; //xml로 만들어진 레이아웃을 뷰로 변환하기 위한 클래스의 변수 Layout. Inflater inflater; public My. Adapter(Context context, List<VO> data, int layout) { super(); this. context = context; this. data = data; this. layout = layout; inflater = (Layout. Inflater)context. get. System. Service( Context. LAYOUT_INFLATER_SERVICE); }

사용자 정의 항목 뷰 @Override //출력할 데이터의 개수를 설정하는 메소드 public int get. Count()

사용자 정의 항목 뷰 @Override //출력할 데이터의 개수를 설정하는 메소드 public int get. Count() { return data. size(); } @Override //항목 뷰에 보여질 문자열을 설정하는 메소드 //position은 반복문이 수행될 때의 인덱스 public Object get. Item(int position) { return data. get(position). get. Name(); } @Override //각 항목뷰의 아이디를 설정하는 메소드 public long get. Item. Id(int position) { return position; }

사용자 정의 항목 뷰 @Override //List. View에 출력될 실제 뷰의 모양을 설정하는 메소드 //convert.

사용자 정의 항목 뷰 @Override //List. View에 출력될 실제 뷰의 모양을 설정하는 메소드 //convert. View는 화면에 보여질 뷰인데 처음에는 null이 넘어오고 두번째 부터는 //이전에 출력된 뷰가 넘어옵니다. //인덱스마다 다른 뷰를 출력하고자 하면 convert. View를 새로 만들지만 //모든 항목뷰의 모양이 같다면 처음 한번만 만들면 됩니다. public View get. View(int position, View convert. View, View. Group parent) { final int pos = position; //convert. View 생성 if(convert. View == null){ //layout에 정의된 뷰를 parent에 넣을 수 있도록 View로 생성 convert. View = inflater. inflate(layout, parent, false); } if(position % 2 == 0) convert. View. set. Background. Color(Color. RED); else convert. View. set. Background. Color(Color. BLUE); //이미지 출력 Image. View img. View = (Image. View)convert. View. find. View. By. Id(R. id. img); img. View. set. Image. Resource(data. get(pos). get. Icon());

사용자 정의 항목 뷰 //텍스트 출력 Text. View txt = (Text. View)convert. View. find.

사용자 정의 항목 뷰 //텍스트 출력 Text. View txt = (Text. View)convert. View. find. View. By. Id(R. id. text); txt. set. Text(data. get(pos). get. Name()); //버튼의 이벤트 처리 Button btn = (Button)convert. View. find. View. By. Id(R. id. btn); btn. set. On. Click. Listener(new View. On. Click. Listener() { @Override public void on. Click(View v) { String mes = "Select Item: " + data. get(pos). get. Name(); Toast. make. Text(context, mes, Toast. LENGTH_LONG). show(); } }); return convert. View; } }

사용자 정의 항목 뷰 v Custom. Content. View. Activity. java 파일 수정 public class

사용자 정의 항목 뷰 v Custom. Content. View. Activity. java 파일 수정 public class Custom. Content. View. Activity extends Activity { @Override protected void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_main); //List. View에 출력할 데이터 생성 List<VO> data = new Array. List<VO>(); VO vo = new VO(); vo. set. Icon(R. mipmap. ic_launcher); //Stack: LIFO(Last Input First Out)-마지막에 삽입된 데이터가 먼저 출력 //함수의 데이터 저장에 사용 vo. set. Name("Stack"); data. add(vo); vo = new VO(); vo. set. Icon(R. mipmap. ic_launcher); vo. set. Name("Queue"); data. add(vo);

사용자 정의 항목 뷰 vo = new VO(); vo. set. Icon(R. mipmap. ic_launcher); vo.

사용자 정의 항목 뷰 vo = new VO(); vo. set. Icon(R. mipmap. ic_launcher); vo. set. Name("Deque"); data. add(vo); //데이터를 List. View에 출력할 수 있도록 Adapter에 주입 My. Adapter adapter = new My. Adapter( this, data, R. layout. icontext); //리스트에 adapter 연결 List. View list = (List. View)find. View. By. Id(R. id. list. View); list. set. Adapter(adapter); }

레이아웃 애니메이션 v Custom. Content. View. Activity. java 파일의 on. Create 메소드에 추가 Animation.

레이아웃 애니메이션 v Custom. Content. View. Activity. java 파일의 on. Create 메소드에 추가 Animation. Set set = new Animation. Set(true); Animation rtl = new Translate. Animation( Animation. RELATIVE_TO_SELF, 1. 0 f, Animation. RELATIVE_TO_SELF, 0. 0 f ); rtl. set. Duration(1000); set. add. Animation(rtl); Animation alpha = new Alpha. Animation(0. 0 f, 1. 0 f); alpha. set. Duration(1000); set. add. Animation(alpha); Layout. Animation. Controller controller = new Layout. Animation. Controller(set, 0. 5 f); list. set. Layout. Animation(controller);

확장 List. View

확장 List. View

확장 List. View v 사용 가능한 Activity 추가(Expand. Activity) v activity_expand. xml파일 수정 <?

확장 List. View v 사용 가능한 Activity 추가(Expand. Activity) v activity_expand. xml파일 수정 <? xml version="1. 0" encoding="utf-8"? > <Linear. Layout xmlns: android="http: //schemas. android. com/apk/res/android" android: orientation="vertical" android: layout_width="match_parent" android: layout_height="match_parent" > <Expandable. List. View android: id="@+id/list" android: layout_width="match_parent" android: layout_height="match_parent" /> </Linear. Layout>

확장 List. View v Expand. Activity. java파일 수정 public class Expand. Activity extends Activity

확장 List. View v Expand. Activity. java파일 수정 public class Expand. Activity extends Activity { Expandable. List. View list; String[] main = new String[] { "Back. End", "Front. End", "Database" }; String[][] sub = new String[][] { {"Java", "Node. js", "PHP", "Python" }, {"HTML", "CSS", "Java. Script", "j. Query", "react", "vue", "angular"}, {"Oracle", "My. SQL", "MSSQL", "Mongo. DB"}, }; public void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_main); list = (Expandable. List. View)find. View. By. Id(R. id. list); List<Map<String, String>> main. Data = new Array. List<Map<String, String>>(); List<Map<String, String>>> sub. Data = new Array. List<Map<String, String>>>();

확장 List. View for (int i = 0; i < main. length; i++) {

확장 List. View for (int i = 0; i < main. length; i++) { Map<String, String> main. Map = new Hash. Map<String, String>(); main. Map. put("main", main[i]); main. Data. add(main. Map); List<Map<String, String>> children = new Array. List<Map<String, String>>(); for (int j = 0; j < sub[i]. length; j++) { Map<String, String> sub. Map = new Hash. Map<String, String>(); sub. Map. put("sub", sub[i][j]); children. add(sub. Map); } sub. Data. add(children); }

확장 List. View Expandable. List. Adapter adapter = new Simple. Expandable. List. Adapter( this,

확장 List. View Expandable. List. Adapter adapter = new Simple. Expandable. List. Adapter( this, main. Data, android. R. layout. simple_expandable_list_item_1, new String[] { "main" }, new int[] { android. R. id. text 1 }, sub. Data, android. R. layout. simple_expandable_list_item_1, new String[] { "sub" }, new int[] { android. R. id. text 1 } ); list. set. Adapter(adapter); } }

Spinner

Spinner

Spinner v 실행 가능한 Activity 추가(Spinner. Activity) v activity_spinner. xml파일 수정 <? xml version="1.

Spinner v 실행 가능한 Activity 추가(Spinner. Activity) v activity_spinner. xml파일 수정 <? xml version="1. 0" encoding="utf-8"? > <Linear. Layout xmlns: android="http: //schemas. android. com/apk/res/android" android: orientation="vertical" android: layout_width="match_parent" android: layout_height="match_parent" > <Text. View android: id="@+id/mytext" android: layout_width="match_parent" android: layout_height="wrap_content" android: text="좋아하는 분야를 선택하세요!!!" /> <Spinner android: id="@+id/myspinner" android: layout_width="match_parent" android: layout_height="wrap_content" /> </Linear. Layout>

Spinner v values 폴더에 array. xml 파일에 추가 <string-array name="departments"> <item>SI</item> <item>SM</item> <item>Back. End</item>

Spinner v values 폴더에 array. xml 파일에 추가 <string-array name="departments"> <item>SI</item> <item>SM</item> <item>Back. End</item> <item>Front. End</item> <item>Full. Stack</item> <item>QA</item> <item>Dev. Ops</item> <item>Data. Base</item> <item>Data. Analysys</item> <item>AI</item> </string-array>

Spinner v Spinner. Activity. java파일 수정 public class Spinner. Activity extends Activity { Array.

Spinner v Spinner. Activity. java파일 수정 public class Spinner. Activity extends Activity { Array. Adapter<Char. Sequence> adspin; boolean m. Init. Spinner; public void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_main); Spinner spin = (Spinner)find. View. By. Id(R. id. myspinner); spin. set. Prompt("분야를 고르세요. "); adspin = Array. Adapter. create. From. Resource(this, R. array. departments, android. R. layout. simple_spinner_item); adspin. set. Drop. Down. View. Resource(android. R. layout. simple_spinner_dropdown_item); spin. set. Adapter(adspin);

Spinner spin. set. On. Item. Selected. Listener(new Spinner. On. Item. Selected. Listener() { public

Spinner spin. set. On. Item. Selected. Listener(new Spinner. On. Item. Selected. Listener() { public void on. Item. Selected(Adapter. View<? > parent, View view, int position, long id) { if (m. Init. Spinner == false) { m. Init. Spinner = true; return; } Toast. make. Text(Main. Activity. this, adspin. get. Item(position) + "를 선택" Toast. LENGTH_SHORT). show(); } public void on. Nothing. Selected(Adapter. View<? > parent) { } }); } }

Grid

Grid

Grid v icon 01. png, icon 02. png 파일을 drawable 디렉토리에 복사 v 실행

Grid v icon 01. png, icon 02. png 파일을 drawable 디렉토리에 복사 v 실행 가능한 Activity 추가(Grid. Activity) v activity_grid. xml파일 수정 <? xml version="1. 0" encoding="utf-8"? > <Grid. View xmlns: android="http: //schemas. android. com/apk/res/android" android: id="@+id/grid" android: layout_width="match_parent" android: layout_height="match_parent" android: padding="10 dip" android: vertical. Spacing="10 dip" android: horizontal. Spacing="10 dip" android: num. Columns="auto_fit" android: column. Width="60 dip" android: stretch. Mode="column. Width" android: gravity="center" />

Grid v Grid. Activity. java파일 수정 public class Grid. Activity extends Activity { public

Grid v Grid. Activity. java파일 수정 public class Grid. Activity extends Activity { public void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_main); Grid. View grid = (Grid. View)find. View. By. Id(R. id. grid); Image. Adapter adapter = new Image. Adapter(this); grid. set. Adapter(adapter); grid. set. On. Item. Click. Listener(new Grid. View. On. Item. Click. Listener() { public void on. Item. Click(Adapter. View<? > parent, View view, int position, long id) { Toast. make. Text(Grid. Activity. this, position + "번째 그림 선택", Toast. LENGTH_SHORT). show(); } }); }

Grid class Image. Adapter extends Base. Adapter { private Context m. Context; int[] picture

Grid class Image. Adapter extends Base. Adapter { private Context m. Context; int[] picture = { R. drawable. icon 01, R. drawable. icon 02}; public Image. Adapter(Context c) { m. Context = c; } public int get. Count() { return 100; } public Object get. Item(int position) { return picture[position % 2]; } public long get. Item. Id(int position) { return position; }

Grid public View get. View(int position, View convert. View, View. Group parent) { Image.

Grid public View get. View(int position, View convert. View, View. Group parent) { Image. View image. View; if (convert. View == null) { image. View = new Image. View(m. Context); image. View. set. Layout. Params(new Grid. View. Layout. Params(45, 45)); image. View. set. Adjust. View. Bounds(false); image. View. set. Scale. Type(Image. View. Scale. Type. CENTER_CROP); image. View. set. Padding(8, 8, 8, 8); } else { image. View = (Image. View) convert. View; } image. View. set. Image. Resource(picture[position % 2]); return image. View; } } }

List. View

List. View

List. View v 이전 Server 연동 Application 수정 v activity_main. xml 파일 수정 <?

List. View v 이전 Server 연동 Application 수정 v activity_main. xml 파일 수정 <? xml version="1. 0" encoding="utf-8"? > <Linear. Layout android: layout_width="match_parent" android: layout_height="match_parent" android: orientation="vertical" xmlns: android="http: //schemas. android. com/apk/res/android" xmlns: app="http: //schemas. android. com/apk/res-auto" xmlns: tools="http: //schemas. android. com/tools" > <Text. View android: layout_width="match_parent" android: layout_height="wrap_content" android: text="ITEM" android: text. Size="32 sp" android: gravity="center"/>

List. View v activity_main. xml 파일 수정 <Linear. Layout android: layout_width="match_parent" android: layout_height="wrap_content" android:

List. View v activity_main. xml 파일 수정 <Linear. Layout android: layout_width="match_parent" android: layout_height="wrap_content" android: orientation="horizontal"> <Spinner android: layout_width="0 dp" android: layout_height="wrap_content" android: layout_weight="2" android: id="@+id/searchtype"/> <Edit. Text android: layout_width="0 dp" android: layout_height="wrap_content" android: layout_weight="2" android: hint="검색어를 입력하세요" android: id="@+id/value"/>

List. View v activity_main. xml 파일 수정 <Button android: layout_width="0 dp" android: layout_height="wrap_content" android:

List. View v activity_main. xml 파일 수정 <Button android: layout_width="0 dp" android: layout_height="wrap_content" android: text="검색" android: text. Size="20 dp" android: text. Alignment="center" android: layout_weight="1" android: id="@+id/search"/> <Button android: layout_width="0 dp" android: layout_height="wrap_content" android: text="다음" android: text. Size="20 dp" android: text. Alignment="center" android: layout_weight="1" android: id="@+id/next"/> </Linear. Layout>

List. View v activity_main. xml 파일 수정 <List. View android: layout_width="match_parent" android: layout_height="match_parent" android:

List. View v activity_main. xml 파일 수정 <List. View android: layout_width="match_parent" android: layout_height="match_parent" android: id="@+id/listview"/> </Linear. Layout>

List. View v 하나의 데이터를 표현하기 위한 Item 클래스 추가 public class Item {

List. View v 하나의 데이터를 표현하기 위한 Item 클래스 추가 public class Item { private int itemid; private String itemname; private int price; private String description; private String pictureurl; public int get. Itemid() { return itemid; } public void set. Itemid(int itemid) { this. itemid = itemid; } public String get. Itemname() { return itemname; } public void set. Itemname(String itemname) { this. itemname = itemname; }

List. View v 하나의 데이터를 표현하기 위한 Item 클래스 추가 public int get. Price()

List. View v 하나의 데이터를 표현하기 위한 Item 클래스 추가 public int get. Price() { return price; } public void set. Price(int price) { this. price = price; } public String get. Description() { return description; } public void set. Description(String description) { this. description = description; } public String get. Pictureurl() { return pictureurl; } public void set. Pictureurl(String pictureurl) { this. pictureurl = pictureurl; }

List. View v 하나의 데이터를 표현하기 위한 Item 클래스 추가 @Override public String to.

List. View v 하나의 데이터를 표현하기 위한 Item 클래스 추가 @Override public String to. String() { return itemname; } }

List. View v Main. Activity. java 파일 수정 public class Main. Activity extends App.

List. View v Main. Activity. java 파일 수정 public class Main. Activity extends App. Compat. Activity { Spinner searchtype; Array. Adapter<Char. Sequence> adapter; Edit. Text value; //Text. View list; List. View listview; Array. List<Item> list; Array. Adapter<Item> item. Adapter; Button next; Button search; Progress. Dialog progress. Dialog; int page. No = 1; int count; String result = "";

List. View v Main. Activity. java 파일 수정 Handler handler = new Handler(Looper. get.

List. View v Main. Activity. java 파일 수정 Handler handler = new Handler(Looper. get. Main. Looper()) { public void handle. Message(Message msg) { //list. set. Text(result); item. Adapter. notify. Data. Set. Changed(); progress. Dialog. dismiss(); } };

List. View v Main. Activity. java 파일 수정 //데이터를 다운로드 받는 스레드 class Thread.

List. View v Main. Activity. java 파일 수정 //데이터를 다운로드 받는 스레드 class Thread. Ex extends Thread { //다운로드 받은 문자열을 저장하기 위한 인스턴스 생성 String. Builder sb = new String. Builder(); @Override public void run() { try { //다운로드 받을 주소 생성 int i = searchtype. get. Selected. Item. Position(); String v = value. get. Text(). to. String(); URL url = null; if(i==0){ url = new URL("http: //192. 168. 0. 10: 9000/mysqlserver/list? pageno=" + page. No); }else if(i==1){ url = new URL("http: //192. 168. 0. 10: 9000/mysqlserver/list? pageno=" + page. No + "&searchtype=itemname&value=" + v); }

List. View v Main. Activity. java 파일 수정 else if(i==2){ url = new URL("http:

List. View v Main. Activity. java 파일 수정 else if(i==2){ url = new URL("http: //192. 168. 0. 10: 9000/mysqlserver/list? pageno=" + page. No + "&searchtype=description&value=" + v); }else if(i==3){ url = new URL("http: //192. 168. 0. 10: 9000/mysqlserver/list? pageno=" + page. No + "&searchtype=both&value=" + v); } Http. URLConnection con = (Http. URLConnection) url. open. Connection(); //옵션 설정 con. set. Use. Caches(false); con. set. Connect. Timeout(30000); //문자열을 다운로드 받기 위한 스트림을 생성 Buffered. Reader br = new Buffered. Reader( new Input. Stream. Reader( con. get. Input. Stream() ) );

List. View v Main. Activity. java 파일 수정 //문자열을 읽어서 저장 while (true) {

List. View v Main. Activity. java 파일 수정 //문자열을 읽어서 저장 while (true) { String line = br. read. Line(); if (line == null) break; sb. append(line + "n"); } //읽은 데이터 확인 Log. e("html", sb. to. String()); //사용한 스트림과 연결 해제 br. close(); con. disconnect(); } catch (Exception e) { Log. e("다운로드 실패", e. get. Message()); }

List. View v Main. Activity. java 파일 수정 try { JSONObject object = new

List. View v Main. Activity. java 파일 수정 try { JSONObject object = new JSONObject(sb. to. String()); count = object. get. Int("count"); JSONArray itemlist = object. get. JSONArray("result"); for (int i = 0; i < itemlist. length(); i = i + 1) { JSONArray ar = itemlist. get. JSONArray(i); Item item = new Item(); item. set. Itemid(ar. get. Int(0)); item. set. Itemname(ar. get. String(1)); item. set. Price(ar. get. Int(2)); item. set. Description(ar. get. String(3)); item. set. Pictureurl(ar. get. String(4)); list. add(item); } handler. send. Empty. Message(0); } catch (Exception e) { Log. e("파싱에러", e. get. Message()); } } }

List. View v Main. Activity. java 파일 수정 @Override protected void on. Create(Bundle saved.

List. View v Main. Activity. java 파일 수정 @Override protected void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. activity_main); searchtype = (Spinner)find. View. By. Id(R. id. searchtype); adapter = Array. Adapter. create. From. Resource(this, R. array. searchtype_array, android. R. layout. simple_spinner_item); adapter. set. Drop. Down. View. Resource(android. R. layout. simple_spinner_dropdown_item); searchtype. set. Adapter(adapter); value = (Edit. Text)find. View. By. Id(R. id. value); //list = (Text. View) find. View. By. Id(R. id. list); listview = (List. View)find. View. By. Id(R. id. listview); list = new Array. List<>(); item. Adapter = new Array. Adapter<>(this, android. R. layout. simple_list_item_1, list); listview. set. Adapter(item. Adapter); listview. set. Choice. Mode(List. View. CHOICE_MODE_SINGLE); listview. set. Divider(new Color. Drawable(Color. RED)); listview. set. Divider. Height(2);

List. View v Main. Activity. java 파일 수정 search = (Button)find. View. By. Id(R.

List. View v Main. Activity. java 파일 수정 search = (Button)find. View. By. Id(R. id. search); next = (Button)find. View. By. Id(R. id. next); next. set. On. Click. Listener(new Button. On. Click. Listener(){ public void on. Click(View view){ int cnt = 3; if(page. No * cnt >= count){ Toast. make. Text(Main. Activity. this, "더이상의 데이터가 없습니다. ", Toast. LENGTH_LONG). show(); return; } page. No = page. No + 1; progress. Dialog = Progress. Dialog. show(Main. Activity. this, "", "다운로드 중. . . "); new Thread. Ex(). start(); } });

List. View v Main. Activity. java 파일 수정 search. set. On. Click. Listener(new Button.

List. View v Main. Activity. java 파일 수정 search. set. On. Click. Listener(new Button. On. Click. Listener(){ public void on. Click(View view){ page. No = 1; //result = ""; list. clear(); progress. Dialog = Progress. Dialog. show(Main. Activity. this, "", "다운로드 중. . . "); new Thread. Ex(). start(); } }); } @Override protected void on. Resume() { super. on. Resume(); progress. Dialog = Progress. Dialog. show(Main. Activity. this, "", "다운로드 중. . . "); new Thread. Ex(). start(); } }

List. View

List. View

List. View v Main. Activity. java 파일의 on. Create 메소드에 listview의 아이템 클릭 이벤트

List. View v Main. Activity. java 파일의 on. Create 메소드에 listview의 아이템 클릭 이벤트 핸들러 작성 listview. set. On. Item. Click. Listener(new Adapter. View. On. Item. Click. Listener() { @Override //첫번째 매개변수는 이벤트가 발생한 List. View //두번째 매개변수는 이벤트가 발생한 항목 뷰 //세번째 매개변수는 이벤트가 발생한 인덱스 //네번째 매개변수는 이벤트가 발생한 항목 뷰의 아이디 public void on. Item. Click( Adapter. View<? > parent, View view, int position, long id) { //Toast로 선택한 데이터를 출력 Item item = list. get(position); String msg = item. get. Itemid() + ": " + item. get. Itemname() + ": " + item. get. Price() +"원"; Toast. make. Text( Main. Activity. this, msg, Toast. LENGTH_LONG). show(); } });

List. View

List. View

List. View v Main. Activity. java 파일의 스크롤 위치를 파악하기 위한 변수를 생성 boolean

List. View v Main. Activity. java 파일의 스크롤 위치를 파악하기 위한 변수를 생성 boolean lastitem. Visible. Flag = false;

List. View v Main. Activity. java 파일의 on. Create 메소드에 listview의 스크롤 이벤트 핸들러

List. View v Main. Activity. java 파일의 on. Create 메소드에 listview의 스크롤 이벤트 핸들러 작성 listview. set. On. Scroll. Listener(new Abs. List. View. On. Scroll. Listener() { @Override public void on. Scroll. State. Changed(Abs. List. View view, int scroll. State) { if (scroll. State == Abs. List. View. On. Scroll. Listener. SCROLL_STATE_IDLE && lastitem. Visible. Flag) { page. No = page. No + 1; int cnt = 3; if(page. No * cnt >= count){ Toast. make. Text(Main. Activity. this, "더이상의 데이터가 없습니다. ", Toast. LENGTH_LONG). show(); return; } new Thread. Ex(). start(); } } @Override public void on. Scroll(Abs. List. View view, int first. Visible. Item, int visible. Item. Count, int total. Item. Count) { lastitem. Visible. Flag = (total. Item. Count > 0) && (first. Visible. Item + visible. Item. Count >= total. Item. Count); } });