1. 애플리케이션 구성요소


애플리케이션 구성요소는 안드로이드 시스템이 관리한다.

새로 추가한 구성요소는 매니페스트(AndroidManifest.xml) 파일에 넣어두면 

앱이 설치될 때 시스템이 이 파일을 보고 구성요소를 확인할 수 있다.



2. 애플리케이션의 4대 구성요소


액티비티: 화면

서비스: 눈에 보이지 않는 백그라운드에서 기능을 동작한다

브로드캐스트 리시버: 다른 어플리케이션이 보내는 이벤트(문자 등)를 받아 처리한다.

컨텐츠 프로바이더: 권한을 받아 컨텐츠(문서, 캘린더 등)의 데이터를 가져오거나 추가할 수 있다.



3. 새 액티비티 추가하기 


액티비티를 새로 만들고 싶다면 File -> New -> Activity -> Empty Activity 메뉴를 이용해 만들 수 있다.

이렇게 추가하면 매니페스트 파일에도 <activity> 태그가 자동으로 추가된다.



4. 화면 전환


새로운 액티비티를 화면에 보여주고 싶다면  startActivity나 startActivityForResult 메소드를 통해 가능하다.

시스템에서 액티비티를 관리하기 때문에 시스템 쪽에 요청이 필요한데, 이 때 시스템이 알아들을 수 있는 포맷이 Intent이다.

startActivityForResult 메소드를 호출하면 인텐트 객체가 시스템으로 전달되는데 구체적으로 액티비티 매니저에게 전달된다.

액티비티 매니저는 지정한 액티비티를 실행하여 화면에 보여준다.



5. 원래 화면으로 돌아가기


어플리케이션에서 실행되는 액티비티는 Activity Stack형태로 관리되기 때문에

화면에 보이는 액티비티가 있을 때 새로운 화면이 실행되면 그 화면은 기존 화면의 위에 보이는 것과 같다.

이때 화면을 없애주는 메소드가 finish이며, 이 메소드를 호출하면 다시 원래의 액티비티로 돌아갈 수 있다.



6.액티비티를 위한 플래그


플래그는 인텐트에 추가할 수 있는 옵션으로, 

시스템이 인텐트를 해석한 후 무언가를 동작시킬 때 옵션에 따라 다른 동작을 하도록 만들 수 있다.

인텐트 객체의 setFlags, addFlags 메소드를 이용해 설정할 수 있으며, 여러 개의 플래그를 "|" 기호로 붙여 한꺼번에 설정할 수도 있다.


1
 intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
cs



7. FLAG_ACTIVITY_SINGLE_TOP 플래그


새로 실행하려는 액티비티와 화면에 보이는 액티비티가 동일한 액티비티인 경우 

메모리에 새로 만들지 않고 화면에 보이는 액티비티를 그대로 보여준다.


여기서, 화면에 보이고 있는 액티비티를 그대로 사용하므로 onCreate 메소드가 호출되지 않고, onNewIntent 라는 메소드가 호출된다.

이 메소드가 별도로 호출되는 이유는 인텐트를 전달받기 위한 것이며, onNewIntent 메소드 안에서 인텐트 객체를 확인할 수 있다.



8. Intent.FLAG_ACTIVITY_NEW_TASK 플래그


액티비티들을 관리하는 TASK 객체를 새로 만든다.



9. Intent.FLAG_ACTIVITY_CLEAR_TOP 플래그


원하는 액티비티가 이미 메모리에 만들어져 있고 

그 이후에 다른 액티비티가 만들어진 경우 원하는 액티비티를 찾아 다시 띄울 때 

그 이후에 만들어진 다른 액티비티들은 없애주는 역할을 한다.





출처: https://www.edwith.org/boostcourse-android/lecture/17064/

연동 과정


https://github.com 에서 작업

1. Github 홈페이지에서 저장소 생성 (New repository)


Android Studio 터미널(Terminal) or Git Bash(해당 안드로이드 프로젝트 있는 폴더)에서 작업

2. git init 입력

3. git remote add origin git@github.com:qlyh8/projectName.git 입력

4. 프로젝트 폴더에 있는 .gitignore 파일 삭제

5. git pull origin master 입력

6. git add . 입력

7. git commit -m “메시지” 입력

8. git push origin master 입력

1. GridView


그리드뷰는 격자 형태로 아이템이 보이는 선택위젯이다.


그리드뷰 또한 선택위젯이기 때문에 어댑터를 사용하며, 사용 방법은 리스트뷰와 유사하다.

리스트뷰와 다른 점은 그리드뷰는 하나의 칼럼이 아니라 여러 개의 칼럼을 사용할 수 있기 때문에

numColumns 속성을 사용한다.



2. 실행 결과 화면




3. activity_main.xml


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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="com.tistory.qlyh8.pracitice.MainActivity"
    android:layout_margin="8dp"
    android:orientation="vertical">
 
   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal">
      <EditText
          android:id="@+id/edit_text_name"
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:hint="이름"/>
      <EditText
          android:id="@+id/edit_text_number"
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:hint="전화번호"
          android:layout_marginLeft="8dp"/>
   </LinearLayout>
 
   <Button
       android:id="@+id/btn_add"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="추가하기"/>
 
   <GridView
       android:id="@+id/grid_view"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_marginTop="8dp"
       android:numColumns="2"/>
 
</LinearLayout>
 
cs



4. MainActivity.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package com.tistory.qlyh8.pracitice;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.Toast;
 
import java.util.ArrayList;
 
public class MainActivity extends AppCompatActivity {
 
    GridView gridView;
    ListAdapter listAdapter;
    EditText editTextName, editTextNumber;
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        gridView = findViewById(R.id.grid_view);
        editTextName = findViewById(R.id.edit_text_name);
        editTextNumber = findViewById(R.id.edit_text_number);
        button = findViewById(R.id.btn_add);
 
        listAdapter = new ListAdapter();
        listAdapter.addItem(new ListItem("김철수""010-1111-1111", R.drawable.list_item1));
        listAdapter.addItem(new ListItem("이나라""010-2222-2222", R.drawable.list_item2));
        listAdapter.addItem(new ListItem("신원호""010-3333-3333", R.drawable.list_item3));
        listAdapter.addItem(new ListItem("정나정""010-4444-4444", R.drawable.list_item4));
        listAdapter.addItem(new ListItem("이지윤""010-5555-5555", R.drawable.list_item5));
        gridView.setAdapter(listAdapter);
 
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ListItem item = (ListItem) listAdapter.getItem(position);
                Toast.makeText(getApplication(), item.getName(), Toast.LENGTH_SHORT).show();
            }
        });
 
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = editTextName.getText().toString();
                String number = editTextNumber.getText().toString();
 
                listAdapter.addItem(new ListItem(name, number, R.drawable.list_item1));
                listAdapter.notifyDataSetChanged();
            }
        });
    }
 
    class ListAdapter extends BaseAdapter {
 
        ArrayList<ListItem> listItem = new ArrayList<>();
 
        public void addItem(ListItem item){
            listItem.add(item);
        }
 
        @Override
        public int getCount() {
            return listItem.size();
        }
 
        @Override
        public Object getItem(int position) {
            return listItem.get(position);
        }
 
        @Override
        public long getItemId(int position) {
            return position;
        }
 
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // 화면에 보이지 않는 뷰를 다시 재사용할 수 있게 하여 데이터를 모두 생성할 필요 없게 한다.
            ListItemView listItemView = null;
            if(convertView == null)
                listItemView = new ListItemView(getApplicationContext());
            else
                listItemView = (ListItemView) convertView;  // convertView: 이전에 썼던 뷰
 
            ListItem item = listItem.get(position);
 
            listItemView.setName(item.getName());
            listItemView.setNumber(item.getNumber());
            listItemView.setImageView(item.getImgId());
 
            return listItemView;
        }
    }
}
 
cs



5. listItem.xml, ListItem.java, ListItemView.java

리스트뷰 코드와 동일





출처: https://www.edwith.org/boostcourse-android/lecture/17059/

'Android' 카테고리의 다른 글

애플리케이션 구성요소와 액티비티 전환 (1)  (0) 2018.05.19
Android Studio와 Git 연동하기  (0) 2018.05.18
Spinner (스피너)  (0) 2018.05.07
ListView (리스트뷰) - 예제  (0) 2018.05.06
ListView (리스트뷰)  (0) 2018.05.06

+ Recent posts