import java.util.*; class For1{ public static void main(String[] args) { ArrayList<String> list=new ArrayList<String>(); list.add("홍길동"); list.add("김철수"); list.add("김영희"); list.add("김태희"); //확장 for사용하기 //list에 저장된 요소를 꺼내와 str에 저장 for(String str:list){ System.out.println(str); } } }

 


'Computer > JAVA' 카테고리의 다른 글

Java util.date sql.date 형변환  (1) 2014.08.14
Java ArrayList 추가  (0) 2014.08.13
Java HashMap  (0) 2014.08.13
Java 16진수로 변환  (0) 2014.08.12
JDBC 출석기능(배열)  (0) 2014.08.11

public class HashMapTest {

public static void main(String[] args) {

HashMap<String, Integer> m = new HashMap<String, Integer>();


m.put("김민철", 100);

m.put("민철", 200);

m.put("철", 300);

//키 존재여부 판단

System.out.println(m.containsKey("김민철2"));

//키값얻기

Integer a = m.get("김민철");

System.out.println(a);

//키 모두 얻기

Set keys = m.keySet();


Iterator<String> it = keys.iterator();

while (it.hasNext()) {

String key = it.next();

Integer i = m.get(key);

System.out.println(key + "===" + i);

}


}

}



'Computer > JAVA' 카테고리의 다른 글

Java ArrayList 추가  (0) 2014.08.13
Java 확장 For 문  (0) 2014.08.13
Java 16진수로 변환  (0) 2014.08.12
JDBC 출석기능(배열)  (0) 2014.08.11
JDBC SQL Select 기본 예제  (0) 2014.08.11
출처 

머릿말
오늘은 GROUP BY문에 대해서 설명을 하도록 하겠습니다.
간단한 사이트를 개발할 때는, 단순히 INSERT, UPDATE, SELECT문만으로 구현이 가능합니다.
하지만, 조금만 사이트의 규모가 커지면, GROUP BY문을 쉴새없이 사용하게 됩니다.
GROUP BY를 제대로 사용하지 못한다면, 개발자로서 한 걸음 나가는데, 큰 무리가 있습니다.
GROUP BY의 원리와 사용법을 제대로 익힐 수 있는 시간이 되기를 기대하며 시작하도록 하겠습니다.


Lesson 4 : GROUP BY
GROUP BY문은 동일한 값을 가진 데이터를 집계해서 조회하고자 할 때 사용하는 문장이다.
조회, 분석용 SQL에서 가장 많이 사용되는 구문이다.
초급 개발자들을 보면, GROUP BY문을 사용할 때, 이렇게 쓰는건가, 저렇게 쓰는건가 하면서 머뭇거리면서 사용하는 경우가 종종 있다. 절대 그런일이 없도록 심도있게 공부하고 익히기를 바란다.

작성방법
SELECT  T1.REGION_GD
FROM    SQL_TEST.CD_REGION T1
GROUP BY T1.REGION_GD
- 집계할 컬럼을 GROUP BY절 뒤에 적어준다.
- SELECT절에는 GROUP BY에 명시된 컬럼만 사용할 수 있다.
- GROUP BY는 WHERE절과 ORDER BY절 사이에 위치한다.

기초이해
-- 일반 SELECT문장
SELECT  T1.STORE_ID
        ,T1.REGION_CD
FROM    SQL_TEST.MA_STORE T1
-- REGION_CD별 데이터를 GROUP BY
SELECT  T1.REGION_CD
FROM    SQL_TEST.MA_STORE T1
GROUP BY T1.REGION_CD
- 조회되는 데이터의 동일한 값들을 하나의 데이터로 집계하는 문장.
- 아래 그림이 GROUP BY의 기본을 이해하는데 더욱 도움을 줄 것이다.
- GROUP BY REGION_CD를 한 경우 SELECT절에는 STORE_ID를 출력할 수 없다.


여러 컬럼의 집계
- 여러 개의 컬럼에 대해서도 GROUP BY의 사용이 가능하다.
SELECT  T1.REGION_CD
        ,T1.STORE_TP
FROM    SQL_TEST.MA_STORE T1
GROUP BY T1.REGION_CD
        ,T1.STORE_TP
- GROUP BY절 뒤에 집계할 컬럼들을 콤마(,)로 구분해서 여러 개 적어준다.
- SELECT절에 컬럼은 GROUP BY에 적은 컬럼들만 올 수 있으며, 순서는 상관 없다.
SELECT  T1.STORE_TP
        ,T1.REGION_CD
FROM    SQL_TEST.MA_STORE T1
GROUP BY T1.REGION_CD
        ,T1.STORE_TP
ORDER BY T1.REGION_CD
        ,T1.STORE_TP


GROUP BY와 집계함수의 사용
- 집계함수는 GROUP BY에 표시된 컬럼들에 대한 집계한 결과값을 만들어 준다.
- GROUP BY에 표시하지 않은 컬럼도 집계함수를 사용하면 SELECT절에 사용이 가능하다.
- 분석용 리포트에서 합계, 데이터의 건수 또는 최대, 최소값을 구하기 위해 많이 사용한다.
SELECT  T1.CALCU_TP
        ,SUM(T1.ORDER_AMT) SUM_ORDER_AMT
FROM    SQL_TEST.HI_ORDER T1
WHERE   T1.ORDER_YMD LIKE '20091001%'
GROUP BY T1.CALCU_TP
- SUM : 데이터의 합계를 구한다.(숫자형 컬럼에만 가능하다.(
- MAX : 최대값을 구한다.
- MIN : 최소값을 구한다.
- COUNT : 데이터의 건수를 구한다.
- AVG : 평균을 구한다.
SELECT  T1.STORE_ID
        ,SUM(T1.ORDER_AMT) SUM_ORDER_AMT
        ,MAX(T1.ORDER_AMT) MAX_ORDER_AMT
        ,MIN(T1.ORDER_AMT) MIN_ORDER_AMT
        ,COUNT(*) CNT_ORDER
FROM    SQL_TEST.HI_ORDER T1
WHERE   T1.ORDER_YMD LIKE '20091001%'
GROUP BY T1.STORE_ID
- 다음 그림을 통해 집계함수를 이해하도록 하자.


GROUP BY : COUNT와 NULL
- COUNT는 데이터의 건수를 집계하는 함수이다.
- GROUP BY를 사용하지 않고 COUNT(*)만 SELECT절에 표시하면, 테이블의 전체건수를 구할 수 있다.
- COUNT(*) 또는 COUNT(컬럼명)으로 사용할 수 있다.
SELECT  COUNT(*)
        ,COUNT(T1.CARD_NO)
FROM    SQL_TEST.HI_ORDER T1
WHERE   T1.ORDER_YMD LIKE '200901%'
- COUNT(*)의 결과는 37948건, COUNT(T1.CARD_NO)의 결과는 15062건이 나왔다.
  (각자의 환경에 따라 결과값은 틀릴 수 있다. 주목할 건, COUNT(*)와 COUNT(T1.CARD_NO)의 결과가 틀리다는 것이다.)
- COUNT(T1.CARD_NO)의 경우는 CARD_NO가 NULL인 경우는 제외하고 COUNT를 수행한다.
- COUNT(*)는 NULL값의 존재 유무 상관없이 카운트된다, 즉 NULL값도 카운트가 1 증가한다.


GROUP BY : COUNT(DISTINCT)
- COUNT집계 함수 안에 DISTINCT를 사용해서, 데이터의 건수가 아닌, 데이터의 종류 수를 알 수 있다.
SELECT  T1.ORDER_YMD
        ,COUNT(*) ORDER_CNT
        ,COUNT(DISTINCT STORE_ID) ORDER_STORE_CNT
FROM    SQL_TEST.HI_ORDER T1
WHERE   T1.ORDER_YMD LIKE '200901%'
GROUP BY T1.ORDER_YMD
ORDER BY T1.ORDER_YMD
- COUNT(DISTINCT)가 발생되는 경우는 많지 않으며, 성능 악화를 발생시킬 수도 있다.
- 최대한 COUNT(DISTINCT)가 발생되지 않도록 테이블이 설계 되어야 하고,
- 아울러, COUNT(DISTINCT)가 발생되지 않도록 사용자 요구사항을 설득하는 것이 필요하다.
- 마지막으로, 최대한 COUNT(DISTINCT)가 발생되지 않도록 SQL을 작성해야 한다.

GROUP BY : ORDER BY에서 집계 함수의 사용
- ORDER BY절에 집계 함수를 사용한다.
SELECT  T1.REGION_CD
        ,COUNT(*) STORE_CNT
FROM    SQL_TEST.MA_STORE T1
GROUP BY T1.REGION_CD
ORDER BY COUNT(*) DESC
- STORE가 많은 REGION_CD부터 출력된다.
- 실제로 분석 시스템에서 이와 같이 집계된 값 기준으로 정렬하는 경우가 많이 있다.

GROUP BY : HAVING절의 사용
- GROUP BY를 통해 집계된 값에 조회 조건을 줄 수 있다.
- GROUP BY가 완료된 결과에 대한 WHERE절이라고 생각할 수 있다.
SELECT  T1.REGION_CD
        ,COUNT(*) STORE_CNT
FROM    SQL_TEST.MA_STORE T1
WHERE   T1.STORE_TP = 'IND'
GROUP BY T1.REGION_CD
HAVING COUNT(*) <= 20
- WHERE졸울 통해 STORE_TP가 IND인 데이터만 찾아낸다.
- GROUP BY를 통해 REGION_CD별로 데이터를 집계한다.
- HAVING절을 통해 STORE카운트가 20이하인 데이터만 조회한다.
- 다음 두 SQL은 동일한 결과를 만들어 내는 SQL이다.
SELECT  T1.REGION_CD
        ,COUNT(*) STORE_CNT
FROM    SQL_TEST.MA_STORE T1
WHERE   T1.STORE_TP = 'IND'
GROUP BY T1.REGION_CD
HAVING T1.REGION_CD IN ('ATL','L.A');
SELECT  T1.REGION_CD
        ,COUNT(*) STORE_CNT
FROM    SQL_TEST.MA_STORE T1
WHERE   T1.STORE_TP = 'IND'
AND     T1.REGION_CD IN ('ATL','L.A')
GROUP BY T1.REGION_CD
- 위의 SQL들은 WHERE절에 조건을 사용하든, HAVING절에 조건을 사용하든 동일한 결과를 조회하는 SQL이다.
- 이와 같은 경우 HAVING조건이 자동으로 WHERE로 변경된다.
- 하지만, 될수 있는한 조건자체를 WHERE절에 적어주도록 한다.
- 경우에 따라 자동 변경이 안될 수 있기 때문이다.


'Computer > DB' 카테고리의 다른 글

SQL Insert select update delete  (0) 2014.09.01
SQL hr 계정 풀기  (0) 2014.09.01
SQL Date 관련 함수  (0) 2014.09.01
SQL Injection 방어기법  (0) 2014.08.21
SQL 원격 데이터베이스 접속  (0) 2014.08.13

public static final String CHARS = "0123456789ABCDEF";


public static String toHexString(byte[] data) {

StringBuilder sb = new StringBuilder();

for (int i = 0; i < data.length; ++i) {

sb.append(CHARS.charAt((data[i] >> 4) & 0x0F)).append(

CHARS.charAt(data[i] & 0x0F));

}

return sb.toString();

}




'Computer > JAVA' 카테고리의 다른 글

Java 확장 For 문  (0) 2014.08.13
Java HashMap  (0) 2014.08.13
JDBC 출석기능(배열)  (0) 2014.08.11
JDBC SQL Select 기본 예제  (0) 2014.08.11
java 배열 선언  (0) 2014.08.08

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout."페이지명");

Button "버튼이름"= (Button) findViewById(R.id."xml페이지이름");




"버튼이름".setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {



});


}

for (int i = 0; i < cnt; i++) {

String lecturetime_sql = "select lecture_starttime, lecture_finishtime from lecture where lecture_id = "

+ array2[i][0];

 

rs = st.executeQuery(lecturetime_sql);

while (rs.next()) {

array2[i][1] = rs.getString(1);

array2[i][2] = rs.getString(2);

}

rs.close();

 

System.out.println("Lecture_id = "

+ array2[i][0] + ", StartTime = "

+ array2[i][1] + "("

+ transeMin(array2[i][1]) + ")"

+ ", FinishTime = " + array2[i][2]

+ "(" + transeMin(array2[i][2])

+ ")");

System.out.println(transeMin(nfctime));

 

String att_chk_time = null;

String att_chk_sql = "select start_time from attendance "

+ "where user_id = '"

+ user_id

+ "' and lecture_id = "

+ array2[i][0]

+ " and att_date = to_date('"

+ nfcday + "', 'mm/dd/yyyy')";

 

rs = st.executeQuery(att_chk_sql);

while (rs.next()) {

att_chk_time = rs.getString(1);

}

rs.close();

if (att_chk_time == null) {

if ((transeMin(array2[i][1]) - transeMin(nfctime)) < 10) {

if ((transeMin(nfctime) - transeMin(array2[i][2])) > 10) {

System.out.println("수업종료");

continue;

}

if ((transeMin(array2[i][1]) - transeMin(nfctime)) < 0) {

System.out.println("지각2");

} else {

System.out

.println("0~10분 정상출석입니다.1");

}

 

} else {

System.out.println("수업이 아닙니다.");

continue;

}

} else {

if ((transeMin(nfctime) - transeMin(att_chk_time)) < 10) {

System.out.println("너무 빨리 찍음");

continue;

} else {

if (transeMin(array2[i][2])

- transeMin(nfctime) > 0) {

System.out.println("조퇴3");

} else if (transeMin(nfctime)

- transeMin(array2[i][2]) < 10) {

System.out.println("정상퇴근");

} else {

System.out.println("수업이 아닙니다.");

continue;

}

 

}

 

}

}

'Computer > JAVA' 카테고리의 다른 글

Java HashMap  (0) 2014.08.13
Java 16진수로 변환  (0) 2014.08.12
JDBC SQL Select 기본 예제  (0) 2014.08.11
java 배열 선언  (0) 2014.08.08
JDBC 데이터베이스 연결  (0) 2014.08.08

try {

conn = DBUtil.getConnection();

st = conn.createStatement();

// user_id 조회

String users_sql = "select user_id from users;

rs = st.executeQuery(users_sql);

while (rs.next()) {

user_id = rs.getString(1);

System.out.println("user_id : " + user_id);

}

rs.close();

} catch (SQLException e) {

e.printStackTrace();

} finally {

if (rs != null)

rs.close();

}

'Computer > JAVA' 카테고리의 다른 글

Java HashMap  (0) 2014.08.13
Java 16진수로 변환  (0) 2014.08.12
JDBC 출석기능(배열)  (0) 2014.08.11
java 배열 선언  (0) 2014.08.08
JDBC 데이터베이스 연결  (0) 2014.08.08



Spinner 위젯
 
 
 
Spinner 는 MS Windows 의콤보박스 컨트롤과 유사한 위젯입니다. Spinner 위젯에는 한줄의 텍스트가 표시되고, 터치하면 팝업창이 나타나면서 ListView 와 유사한 목록이 나타납니다. 목록 중에서 하나를 선택하면 팝업창이 사라지고 선택된 항목의 텍스트로 바뀜니다.
 
 
 
 
   
 
 
 
 
사용방법은 ListView 와 거의 유사합니다.ArrayList 에 목록 데이터를 저장하고, ArrayAdapter 를 통해서 Spinner 위젯과 연결하면 됩니다. 자세한 사용법은 예제를 통해서설명 드리겠습니다.
 
 
 
(1) Spinner 와 ArrayList 연동하기
 
 
Spinner 위젯에 10개의 텍스트문자열을 표시하는 예제를 만들어 보겠습니다. 그리고 사용자가 항목을 선택하면 해당 항목의 내용을 TextView 위젯에 표시해 보겠습니다.
 
 
 
1) 새로운 소스 프로젝트를 생성하고 이름을 SpinnerEx라고 지정합니다. 소스 프로젝트를 생성하는 방법은 먼저번 시간에 했던것과 동일합니다.
 
2) 레이아웃 파일에(/res/layout/activity_main.xml)1개의 Spinner 위젯을 추가해 보겠습니다. 레이아웃파일에 아래와 같이 코드를 추가합니다.
 
 
 
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
 
 
   xmlns:tools="http://schemas.android.com/tools"
 
 
   android:layout_width="match_parent"
 
 
   android:layout_height="match_parent"
 
 
   tools:context=".MainActivity" >
 
 
 
   <Spinner
 
 
       android:id="@+id/spinner1"
 
 
       android:layout_width="match_parent"
 
 
       android:layout_height="wrap_content"
 
 
       android:layout_alignParentLeft="true"
 
 
       android:layout_alignParentTop="true" />
 
 
 
 
 
   <TextView
 
 
       android:id="@+id/textMessage"
 
 
       android:layout_width="wrap_content"
 
 
       android:layout_height="wrap_content"
 
 
       android:layout_centerHorizontal="true"
 
 
       android:layout_centerVertical="true"
 
 
       android:text="@string/hello_world"/>
 
 
 
</RelativeLayout>
 
 
 
1개의 Spinner 위젯을추가했고 ID 를 spinner1 으로 지정했습니다. 그리고 자동으로 생성되는 TextView 위젯의 ID 를 textMessage 로 지정했습니다.
 
 
Graphical Layout 편집화면에서 확인해 보면 아래와 같습니다.
 
 
 
 
 
3) 이 상태로 에뮬레이터에서 실행해 보면 Spinner 에 아무것도 표시되지 않습니다. Spinner 에 항목을추가해 보겠습니다. Activity 소스파일(/src/~/MainActivity.java)을열고 아래와 같이 새로운 멤버변수 3개를 선언해 줍니다. 에러표시가나타나면 단축키 Ctrl+Shift+o 를 눌러주면 됩니다.
 
 
 
public class MainActivity extends Activity{
 
 
           Spinner mSpinner1;
 
 
           TextView mTextMessage;
 
 
           ArrayList<String> mArGeneral;
 
 
 
mSpinner1 은 Spinner위젯의 핸들을 저장하는 변수입니다.
 
 
mTextMessage 는TextView 위젯의 핸들을 저장하는 변수입니다.
 
 
mArGeneral 은ListView 에 표시할 데이터를 저장하는 ArayList 배열 입니다.
 
 
 
ArrayList 배열에 10개의문자열을 저장하고 이것을 Spinner 와 연결하는 기능을 구현해 봅시다. MainActivity 클래스에 initSpinner() 라는 함수를생성하고 아래와 같이 코드를 입력합니다.
 
 
 
           publicvoid initSpinner() {
 
 
                     String[]strTextList = {"Seoul", "Tokyo", "Newyork","Londeon",
 
 
                                          "Baijing","Kongga", "Moscuba", "Singgapol",
 
 
                                          "Pusan","Hongkong"};
 
 
                     mArGeneral= new ArrayList<String>();
 
 
                     for(inti=0 ; i < 10 ; i ++) {
 
 
                                mArGeneral.add(strTextList[i]);
 
 
                     }                 
 
 
 
                     ArrayAdapter<String>adapter;
 
 
                     adapter= new ArrayAdapter<String>(this,
 
 
                                          android.R.layout.simple_spinner_item,mArGeneral);
 
 
                     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
 
 
                     mSpinner1= (Spinner)findViewById(R.id.spinner1);
 
 
                     mSpinner1.setAdapter(adapter);
 
 
           }
 
 
 
코드내용을 설명하자면, String 객체를 저장할 수 있는 ArrayList 배열 객체를 생성해서 mArGeneral 이라는변수명에 할당합니다.
 
 
for 루프를 사용해서 10개의문자열을 mArGeneral 에 저장합니다.
 
 
mArGeneral 를 Spinner와 연동하기 위해서 ArrayAdapter 객체를 생성해서 adapter 라는 이름의 변수에 할당합니다. ArrayAdapter 를생성할 때 레이아웃을 지정해야 하는데 여기서는 기본으로 제공되는 레이아웃 중에서 android.R.layout.simple_spinner_dropdown_item을 사용했습니다. 단일 항목만을 표시할 때 사용합니다. 참고로ArrayListView 예제에서와 같이 android.R.layout.simple_list_item_1을 사용해도 결과는 동일합니다.
 
 
그런 다음 Spinner 에 adapter를 전달합니다. 이렇게 하면 mArGeneral 에저장된 문자열 배열이 Spinner 에 전달되는 것입니다.
 
 
 
이제 Activity 가 생성될 때 위 함수를 호출해 주면 됩니다. onCreate() 함수 끝부분에 아래와 같이 새로운 코드를 추가합니다.
 
 
 
@Override
 
 
   protected void onCreate(Bundle savedInstanceState) {
 
 
       super.onCreate(savedInstanceState);
 
 
       setContentView(R.layout.activity_main);
 
 
     
 
 
        mTextMessage =(TextView)findViewById(R.id.textMessage);
 
 
        initSpinner();
 
 
    }
 
 
 
TextView 위젯의 핸들을 구해서 mTextMessage 라는 이름의 변수에 할당했습니다. 이 변수는잠시 후에 Spinner 에서 발생한 이벤트를 처리할 때 사용될 것입니다.
 
 
그런 다음 initSpinner() 함수를 호출해서 Spinner 위젯에 항목을 추가해 주었습니다.
 
 
 
이제 에뮬레이터에서 결과를 확인해 봅시다. Spinner 에 첫번째텍스트 항목이 표시된 것을 확인할 수 있습니다. Spinner 를 터치하면 팝업창이 나타나고 전체 목록이표시됩니다. 목록을 위아래로 드래그하면 이동합니다.
 
 
항목을 선택하면 팝업창이 사라지고 Spinner 에 선택된 항목의텍스트가 표시됩니다.
 
 
 
 
   
 
 
 
 
(2) Spinner 항목 선택 이벤트 처리 –이벤트 리스너 클래스 생성
 
 
사용자가 Spinner 의 항목을 선택하면 해당 항목의 텍스트를 TextView 위젯에 표시하는 기능을 구현해 봅시다.ArrayListView 예제와 동일하게 이벤트 리스너 클래스를 생성해서 처리하겠습니다.
 
 
 
1) Spinner 위젯의 클릭 이벤트를 받아서 처리하는 리스너 클래스를 생성합니다. MainActivity 클래스에아래와 같이 새로운 클래스를 생성합니다.
 
 
 
           AdapterView.OnItemSelectedListenermItemSelectedListener =
 
 
                     newAdapterView.OnItemSelectedListener() {
 
 
                     publicvoid onItemSelected(AdapterView<?> parent, View view,
 
 
                                          intposition, long id) {
 
 
                             
 
 
                                StringstrItem = mArGeneral.get(position);
 
 
                                mTextMessage.setText(strItem);
 
 
                     }
 
 
                  
 
 
                     publicvoid onNothingSelected(AdapterView<?> parent) {
 
 
                                mTextMessage.setText("NoItem Selected.");
 
 
                     }
 
 
           };
 
 
 
소스코드를 설명하자면, AdapterView.OnItemSelectedListener는 팝업창 목록의 항목을 선택했을 때 발생하는 이벤트를 수신하는 리스너 클래스 입니다. 여기서는리스너 클래스를 재정의하면서 동시에 객체도 생성하였습니다. 리스너 객체의 이름은 mItemSelectedListener 로 지정하였습니다.
 
 
리스너 클래스 내부에 onItemSelected() 가 바로 항목선택 이벤트 함수입니다. 사용자가 ListView 위젯의항목을 터치하면 이 함수가 실행되는 것입니다.
 
 
4개의 파라미터가 전달되는데 가장 중요한 것은 3번째 position 입니다. 몇번째항목을 선택했는지를 알수 있습니다.
 
 
Spinner 에 저장된 항목 텍스트는 mArGeneral 이라는 이름의 ArrayList 객체에 저장되어있기 때문에 여기서 선택된 항목의 텍스트를 구할 수 있습니다.
 
 
ArrayList.Get() 함수에 인덱스 번호를 전달하면 텍스트를구할 수 있습니다.
 
 
마지막으로 ArrayList 배열에서 구한 텍스트를 TextView 위젯에 표시해주는 것입니다.
 
 
 
onNothingSelected() 함수는 사용자가 선택을 취소했을때 발생하는 이벤트를 처리합니다.
 
 
 
[Tip!]
 
 
ListView 위젯의 이벤트를 구하는 리스너는 AdapterView.OnItemClickedListener이고, 항목 선택 이벤트함수는 onItemClick() 입니다. Spinner 위젯의 이벤트를 구할때는 onItemSelected() 와onNothingSelected() 함수 2가지를 모두 정의해주어야 합니다. 그렇지 않으면 오류가 발생합니다.
 
 
 
2) 위에서 생성한 리스너 객체가 이벤트를 받으려면 Spinner위젯과 연결이 되어야 합니다. onCreate() 함수 끝부분에 아래와 같이 한줄을 추가해줍니다.
 
 
 
protected void onCreate(Bundle savedInstanceState) {
 
 
       super.onCreate(savedInstanceState);
 
 
       setContentView(R.layout.activity_main);
 
 
     
 
 
       mTextMessage = (TextView)findViewById(R.id.textMessage);
 
 
       initSpinner();
 
 
        mSpinner1.setOnItemSelectedListener(mItemSelectedListener);
 
 
    }
 
 
 
Spinner 위젯의 항목 선택 이벤트를 구하기 위해서 Spinner.setOnItemSelectedListener() 함수에 리스너 객체를 전달하였습니다. 이렇게 하면 사용자가 Spinner 위젯의 항목을 터치했을 때 mItemSelectedListener 객체의 onItemSelected() 함수가실행되는 것입니다.
 
 
 
3) 에뮬레이터에서 결과를 확인해 봅시다. 처음 실행될 때 자동으로 첫번째 항목의 텍스트가 TextView 에표시됩니다. Spinner 팝업창의 항목을 선택하면 화면 아래TextView 에 선택 항목의 내용이 표시됩니다.
 
 
 
 
 
 
(3) Spinner 항목 선택 이벤트 처리 –Activity 가 이벤트 리스너 클래스를 상속
 
 
이번에는 소스코드를 수정해서 Spinner 위젯의 이벤트 리스너를 생성하지 않고 Activity 가 이벤트를 직접 받도록 구현해 보겠습니다. 익숙해지면이 방식이 편리합니다.
 
 
 
1) MainActivity 클래스 시작 부분으로 가서 아래와 같이 AdapterView.OnItemSelectedListener 를 상속받는 코드를 추가합니다. 이렇게 하면 MainActivity 가 Spinner 위젯의 이벤트를 직접 수신할 수 있습니다.
 
 
 
public class MainActivity extends Activity
 
 
           implementsAdapterView.OnItemSelectedListener {
 
 
 
2) 리스너가 MainActivity 로 변경되었기 때문에 위에서 onCreate() 함수 끝에 있는 코드를 아래와 같이수정합니다.
 
 
 
protected void onCreate(Bundle savedInstanceState) {
 
 
       super.onCreate(savedInstanceState);
 
 
       setContentView(R.layout.activity_main);
 
 
     
 
 
       mTextMessage = (TextView)findViewById(R.id.textMessage);
 
 
       initSpinner();
 
 
        mSpinner1.setOnItemSelectedListener(this);
 
 
    }
 
 
 
3) 마지막으로 이벤트 리스너 클래스를 삭제합니다. 아래와같이 주석처리해서AdapterView.OnItemSelectedListener  클래스를 삭제하고 내부 함수만 남겨둡니다.
 
 
 
           //AdapterView.OnItemSelectedListenermItemSelectedListener =
 
 
           //         newAdapterView.OnItemSelectedListener() {
 
 
           publicvoid onItemSelected(AdapterView<?> parent, View view,
 
 
                                intposition, long id) {
 
 
                             
 
 
                     StringstrItem = mArGeneral.get(position);
 
 
                     mTextMessage.setText(strItem);
 
 
           }
 
 
                  
 
 
           publicvoid onNothingSelected(AdapterView<?> parent) {
 
 
                     mTextMessage.setText("NoItem Selected.");
 
 
           }
 
 
           //};
 
 
 
4) 에뮬레이터에서 결과를 확인해 봅시다. 먼저 번과 동일하게 결과가 표시되면 성공입니다.
 
 
 
 



1. MainActivity

2. SubActivity



'Computer > Android' 카테고리의 다른 글

안드로이드 버튼 클릭 리스너  (0) 2014.08.12
안드로이드 스피너 예제  (0) 2014.08.08
안드로이드 화면전환  (0) 2014.08.08
안드로이드 NFC 태그값 읽어 오기  (0) 2014.08.08
안드로이드 한글 깨짐  (0) 2014.08.08

출처 : http://starmethod.tistory.com/148



안녕하세요. 스타입니다.


어제 안드로이드 hellloworld 띄워 보았고요.


오늘은 Activity 전환에 대해서 알아보겠습니다.


안드로이드에서는 어플리케이션의 하나의 화면을 액티비티라고 말합니다. 


액티비티의 화면은 레이아웃 파일로 수정하고, 동작은 소스코드에서 이루어 집니다.


액티비티의 상태(state)는 활성, 일시정지, 정지 이렇게 나뉘어져있습니다.


- 활성 : 액티비티가 현재 화면에 띄워져 있는 상태이며 사용자와 상호 작용이 가능한 상태

- 일시정지 : 액티비티가 화면에 표시되고 있긴 하지만 사용자와 상호 작용이 못하는 상태

- 정지 : 홈화면으로 나가거나, 다른 액티비티에 가려서 화면에서 아예 보이지 않게 된 상태


매니페스트에서 메인과 서브를 설정해 줍니다. 파일 이름은 대소문자를 가리기 때문에 확인해 주세요.


AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.exam"

    android:versionCode="1"

    android:versionName="1.0" >


    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="17" />


    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity android:name="MainActivity" android:label="@layout/activity_main">

            <intent-filter>

                <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.LAUNCHER"/>

            </intent-filter>

            

        </activity>

        <activity android:name="SubActivity" android:label="@layout/subactivity"></activity>

    </application>


</manifest>



메인쪽 레이아웃 소스 코드

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity" >


    <TextView

        android:id="@+id/textView1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/hello_world" />


    <Button

        android:id="@+id/BtnCalltoSub"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/textView1"

        android:layout_below="@+id/textView1"

        android:text="CallSubActivity" />


</RelativeLayout>



메인에서 호출할 서브쪽 레이아웃 소스코드

subactivity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >


    <TextView

        android:id="@+id/textView1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Sub activity" >

    </TextView>


    <Button

        android:id="@+id/BtnCalltoMain"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Call main Activity" />


</LinearLayout>


메인쪽 버튼과 화면 작동을 담당할 자바 코드

MainActivity.java

package com.exam;


import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;



public class MainActivity extends Activity  {

@Override

protected void onCreate(Bundle savedInstanceState) 

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button btnCallMain = (Button) findViewById(R.id.BtnCalltoSub);

btnCallMain.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v)

{

Log.i("onClick", "CallSubActivity");

Intent intentSubActivity = 

new Intent(MainActivity.this, SubActivity.class);

startActivity(intentSubActivity);

}

});

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}


}



서브쪽 버튼과 작동을 담당할 자바 코드
SubActivity.java
package com.exam;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class SubActivity extends Activity  
{
@Override
protected void onCreate(Bundle savedInstanceState)  {
super.onCreate(savedInstanceState);
setContentView(R.layout.subactivity);
Button btnCallMain = (Button) findViewById(R.id.BtnCalltoMain);
btnCallMain.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("onClick", "CallMainActivity");
finish();
}

});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

수행결과는 다음과 같음.


버튼을 누르면 서브액티비티로 연결됩니다.


서로 전환 가능합니다.





출처 : http://starmethod.tistory.com/148


+ Recent posts