티스토리 뷰

Android

[Android] 플래그의 활용 예제

감자형 2017. 9. 21. 23:47
  • 인텐트로 전달사용 예제
1
2
3
4
5
6
7
8
9
1. Exapmle_Parcelable 프로젝트 생성
 
2. App -> new -> Activity -> MenuActivity의 이름으로 생성
 
3. 메니페스트 파일안에 -> MenuActivity 파일이 자동으로 추가 된다는것을 알아야한다.
 
4. activity_main.xml 에 Button 추가 "메뉴 엑티비티 띄우기"
 
5. MainActivity.java에 코드 추가
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.example.example_parcelable;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
 
import java.util.ArrayList;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Button button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override           // 버튼클릭시 onClick 메소드가 실행되도록 한다
            public void onClick(View v) {
 
                Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
 
 
                // 배열형식 선언
 
                ArrayList<String> names = new ArrayList<String>();      //
                names.add("홍길동");
                names.add("KGH");
 
                intent.putExtra("names",names);         // 인텐트를 메뉴엑티비티에 전달 ,MenuActivity쪽에서는 getIntent() 선언
 
 
 
                startActivityForResult(intent, 101);
            }
        });
    }
 
 
}
cs
1
2
3
4
5
6. activity_menu.xml 파일로 이동
 
- 버튼 생성( "돌아 가기") 생성
 
7. MenuActivity.java 파일로 이동 해서 코드 작성 설명 같이 첨부
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.example.example_parcelable;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
 
import java.util.ArrayList;
 
public class MenuActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
 
        Button button2 = (Button)findViewById(R.id.button2);
 
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();          // 이전에 있던 메인화면이 나타나게 된다.
            }
        });
        // 메뉴엑티비티가 맨처음 뜨게 되면 onCreate가 호출 되는데, 값을 받아오고 싶으면 getIntent() 메소드 사용한다.
        Intent passedIntent = getIntent();              
        // 메인 엑티비티로 부터 값을 받아온다.
        proccessIntent(passedIntent); 
        // proccessIntent 라는 메소드를 만들고 전달 받고 여기 메소드에서 처리하게 만든다.
 
 
    }
    // 받아온 인텐트 값 처리하기 위한 메소드 생성
    private void proccessIntent(Intent intent) {
        if(intent != null ){
            // 시리얼 라이즈는 많이 무겁다.
            ArrayList<String> names = (ArrayList<String>)intent.getSerializableExtra("names");
            // 시리얼라이저블을 넣고 뺄 수 있다.
            // 이때 implement 하기때문에 값을 넣고 뺄 수 있음. names는 아까 그 names의 값을 빼낼 수 있다.
            if(names != null){
                Toast.makeText(getApplicationContext(),"전달받은 이름 리스트 개수" + names.size(),Toast.LENGTH_LONG).show();
                // 이름 리스트 개수를 출력 시키는 역할
 
 
            }
 
        }
 
    }
}
cs

1
보통 parcelable을 잘 사용하진않지만 , 실제로는 많이 쓰인다.
cs

최종 화면)


  • Parcelable 예제 작성하기
1
2
3
4
5
6
7
8
1.Parcelable 정의 하기 위해서는 클래스의 인터페이스를 구현해야 한다.  
 
2. app -> java -> package선택 -> new 자바 클래스 -> 이름: SimpleData , kind : class선택하고, interface(s) : android.os.Parcelable 입력하면 -> 클래스자동으로 생성 된다.
 
3. SimpleData 파일에 class 가 자동으로 입력된것을 볼 수 있다.
 
4. 이때 public class에서는 오류가 발생하는데 , 오른쪽 마우스 -> generate를 눌러서 아직 구현이 안된 메소드를 자동으로 추가 해준다.
 
cs

1
2
3
4
5
6
7
8
9
10
11
12
public class SimpleData implements Parcelable {
 
    @Override
    public int describeContents() {
        return 0;
    }
 
    @Override
    public void writeToParcel(Parcel dest, int flags) {
 
    }
}
cs
1
2
3
4
5. 이때, 또 CREATOR 가 없다고 나온다.
변수를 따로 선언 해준다 int,String 타입으로
 
6. 그러면 이제 int,String 의 생성자를 만들수 있다. 오른쪽 마우스 -> generate -> construct -> 생성자 두개 생성을 자동으로 해준다.
cs

1
2
3
4
5
6
7
int number;
String message;
 
public SimpleData(int number, String message) {
    this.number = number;
    this.message = message;
}
cs
1
2
3
 
7. 이때, 또다른 파라미터가 들어왔을 경우 처리를 위하여 생성자 오버로딩을 실시한다, 
생성자 오버로딩이란? 같은 이름의 메소드에서, 파라미터의 값과 타입이 다른 메소드를 다시 정의할 수 있는것을 의미한다.(return type X)
cs

1
2
3
4
5
6
// 데이터가 들어가있는것을 말한다.
 
public SimpleData(Parcel src){
    number = src.readInt();         // Integer 타입을 받아 할당 받겠다.
    message = src.readString();
}
cs

8. SimpleData.java 파일의 최종 코드 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.example.example_parcelable;
 
import android.os.Parcel;
import android.os.Parcelable;
 
/**
 * Created by kgh on 2017-09-21.
 */
 
public class SimpleData implements Parcelable {
    int number;
    String message;
 
    public SimpleData(int number, String message) {
        this.number = number;
        this.message = message;
    }
 
    // 데이터가 들어가있는것을 말한다.
 
    public SimpleData(Parcel src){
        number = src.readInt();         // Integer 타입을 read 받아 할당 받겠다.
        message = src.readString();
    }
 
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator(){
        // parcelable 을 쓰게 되면 CREATOR 객체를 꼭 선언 해주어야 한다.
 
        public SimpleData createFromParcel(Parcel src){
            return new SimpleData(src);
        }
        public SimpleData[] newArray(int size){
            return new SimpleData[size];
 
        }
 
    };
 
    @Override
    public int describeContents() {
        return 0;
    }
 
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(number);
        dest.writeString(message);
 
    }
 
    // 이렇게 완성된 Parcelable을 인터페이스를 구현 한것을 볼 수 있다. 이제 이것을 가지고
    // Parcelable 을 사용이 가능하다.
 
}
cs

1
2
=> 결국 이것은 Parcelable의 인터페이스를 구현한것이므로 다른 java파일에서도 이 인터에피스 기본틀을 이용해서 Parcelable을 사용할 수 있다.
 
cs
9. Parcelable을 사용한 최종 main.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.example.example_parcelable;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
 
import java.util.ArrayList;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Button button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override           // 버튼클릭시 onClick 메소드가 실행되도록 한다
            public void onClick(View v) {
 
                Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
 
 
                // 배열형식 선언
 
                ArrayList<String> names = new ArrayList<String>();      //
                names.add("홍길동");
                names.add("KGH");
 
                intent.putExtra("names",names);         // 인텐트를 메뉴엑티비티에 전달 ,MenuActivity쪽에서는 getIntent() 선언
 
                // 이제 Parcelable을 사용이 가능 하다 밑에 코드가 parcelable 코드
                SimpleData data = new SimpleData(100,"Hello");
                intent.putExtra("data",data);           // 데이터를 받아서 사용이 가능하다.
                
 
 
                startActivityForResult(intent, 101);
            }
        });
    }
 
 
}
cs
10. Parcelable을 사용한 menu.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package com.example.example_parcelable;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
 
import java.util.ArrayList;
 
public class MenuActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
 
        Button button2 = (Button)findViewById(R.id.button2);
 
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();          // 이전에 있던 메인화면이 나타나게 된다.
            }
        });
        // 메뉴엑티비티가 맨처음 뜨게 되면 onCreate가 호출 되는데, 값을 받아오고 싶으면 getIntent() 메소드 사용한다.
        Intent passedIntent = getIntent();
        // 메인 엑티비티로 부터 값을 받아온다.
        proccessIntent(passedIntent);
        // proccessIntent 라는 메소드를 만들고 전달 받고 여기 메소드에서 처리하게 만든다.
 
 
    }
    // 받아온 인텐트 값 처리하기 위한 메소드 생성
    private void proccessIntent(Intent intent) {
        if(intent != null ){
            // 시리얼 라이즈는 많이 무겁다.
            ArrayList<String> names = (ArrayList<String>)intent.getSerializableExtra("names");
            // 시리얼라이저블을 넣고 뺄 수 있다.
            // 이때 implement 하기때문에 값을 넣고 뺄 수 있음. names는 아까 그 names의 값을 빼낼 수 있다.
            if(names != null){
                Toast.makeText(getApplicationContext(),"전달받은 이름 리스트 개수" + names.size(),Toast.LENGTH_LONG).show();
                // 이름 리스트 개수를 출력 시키는 역할
 
 
            }
            //Parcelable 부분
 
            SimpleData data = (SimpleData) intent.getParcelableExtra("data");
            // parcelable을 구현한 simple data가 있다는것을 의미,  "data" 키값
 
            if(data != null){
                Toast.makeText(getApplicationContext(),"전달받은 이름 리스트 개수" + data.message,Toast.LENGTH_LONG).show();
            }
 
        }
 
    }
}
cs
  • 최종 화면








공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함