MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Button
Button btn_intent = (Button)findViewById(R.id.btn_intent);
btn_intent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, SecondActivity.class));
finish();
}
});
//링크
Button btn_link = (Button)findViewById(R.id.btn_link);
btn_link.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//웹사이트로 이동
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.naver.com")));
}
});
//레이아웃
Button btn_layout = (Button)findViewById(R.id.btn_layout);
btn_layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, LayoutActivity.class));
}
});
}
}
MainActivity 에서는 인텐트(Intent) 와 웹 사이트로 연결해주는 것을 해보았습니다. 실행하면 위와 같은 화면으로 나타납니다!
먼저, 인텐트(Intent)란?
- 액티비티 간의 전환, 특정 사이트로 링크를 연결해 줄 때, 문자열/정수/실수/ 나 Key 값을 주고 받을 때 쓰입니다.
인텐트를 쓸 때는 Intent Intent i = new Intent(출발지, 도착지); 로 해주어야 하고 이것은 액티비티 전환이 일어난 것은 아니고 선언만 해놓은 것 입니다.
주의할 점은 출발지에 this / MainActivity.class 로 쓸 경우 생성자 문제로 오류가 난다고 하므로 MainActivity.this 로 써줘야 합니다!
startActivity(내가 선언한 인텐트 객체명); 를 해서 액티비티 전환이 일어나게 해줍니다.
finish(); 로 액티비티를 끝냅니다.
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.naver.com"))); 웹 브라우저를 열기 위해 ACTION_VIEW를 사용했고, 웹 브라우저 주소를 Uri.parse에 넣어줍니다.
위는 MainActivity에서 세 개의 버튼을 눌렀을 때 나오는 화면입니다.
MainActivity 일부를 코틀린으로 변환해서 코틀린 문법 살펴보기
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//Button
val btn_intent : Button? = findViewById(R.id.btn_intent)
//= val btn_intent = findViewById(R.id.btn_intent) as Button
btn_intent?.setOnClickListener{
startActivity(Intent(this@MainActivity, SecondActivity::class.java))
finish()
}
}
}
위의 코드를 보면서 코틀린의 특성을 몇 가지 살펴보겠습니다.
class MainActivity : AppCompatActivity 는 "클래스명 extends 상속받고자 하는 클래스" 를 의미합니다.
모든 함수를 fun으로 쓰기 때문에 접근제한을 쓰지 않습니다.
? 는 NULL을 입력받는 것을 허용할 것이냐 말 것이냐를 나타냅니다.
"클래스명?" 일 경우 NULL 값이 허용된다는 의미이고, "클래스명" 일 경우 NULL값을 허용하지 않겠다는 의미입니다.
코틀린에서 변수를 선언할 때는 val / var 을 씁니다.
val 은 상수 값으로 사용할 수 없고, 초기에 값을 할당하면 변경할 수 없습니다.
var은 가변 변수이고, 초기에 값을 할당하면 자유롭게 변경해서 사용할 수 있습니다.
코틀린은 세미콜론(;)을 쓰지 않습니다.
SecondActivity.java
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
final EditText et_num1 = (EditText)findViewById(R.id.et_number1);
final EditText et_num2 = (EditText)findViewById(R.id.et_number2);
Button add = (Button)findViewById(R.id.btn_add);
final TextView tv = (TextView)findViewById(R.id.tv_result);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String num1 = et_num1.getText().toString();
String num2 = et_num2.getText().toString();
int num_1 = Integer.parseInt(num1);
int num_2 = Integer.parseInt(num2);
tv.setText(num_1 + num_2 + ""); //String만 가져올 수 있음
}
});
Button btn_goto = (Button)findViewById(R.id.btn_goto);
btn_goto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(SecondActivity.this, LayoutActivity.class);
i.putExtra("key","hi");
startActivity(i);
finish();
}
});
}
}
SecondAcitivity 에서는 값을 두 개 받아와서 더하기 연산을 해주고, 액티비티 간의 키 값 전달을 해보았습니다.
String num1 = et_num1.getText().toString(); et_num1의 텍스트를 가져와서 문자열로 바꿔줍니다
int num_1 = Integer.parseInt(num1); 더하기 연산을 하려면 정수여야하기 때문에 문자열을 정수로 바꿔줍니다
tv.setText(num_1 + num_2 + ""); 더하기 연산을 한 값을 setText()로 tv에 나타나게 합니다
여기서 주의할 점은 tv.setText(num_1 + num_2); 할 경우 더하기 연산을 한 값이 나타나지 않습니다 그 이유는 setText()는 String만 가져올 수 있는데 num_1 + num_2 는 정수값이기 때문입니다. 그래서 문자열로 바꿔주는 작업이 필요합니다
i.putExtra("key","hi"); 전환할 액티비티로 값을 넘겨줍니다. 키는 key이고, 값은 hi 입니다.
왼쪽 사진은 값을 넣고 더하기를 눌렀을 때 연산의 값이 화면에 나타나는 것을 보여주는 사진이고, 오른쪽 사진은 키전달을 눌렀을 때 값이 전달되어 토스트 메세지에 전달된 값이 나타나는 것을 보여주는 사진입니다.
LayoutActivity.java
public class LayoutActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout);
Intent j = getIntent();
String test = j.getStringExtra("key");
Toast.makeText(getApplicationContext(),test,Toast.LENGTH_LONG).show();
}
}
LayoutActivity 에서는 인텐트를 통해 값을 받아오는 것을 해보았습니다.
String test = j.getStringExtra("key"); getStringExra에 키를 넣어줘서 키의 값을 가져옵니다
Toast.makeText(getApplicationContext(),test,Toast.LENGTH_LONG).show(); 가져온 값을 토스트메세지로 띄워줍니다
왼쪽 사진은 MainActivity에서 Button을 누른 후 SecondActivity에서 키전달을 눌렀을 때 화면입니다. 값이 전달되어 키의 값이 "hi" 가 토스트메세지로 나타납니다. 오른쪽 사진은 MainActivity에서 레이아웃을 눌렀을 때 화면입니다. 전달된 값이 없기 때문에 토스트메세지에 텍스트가 없는 상태로 나타납니다.
'Android' 카테고리의 다른 글
[Android] 안드로이드 연락처 화면으로 이동하기 (0) | 2020.09.11 |
---|---|
[Android] 안드로이드 생성주기 (0) | 2020.09.10 |
[Android] 자기소개어플 만들기 (0) | 2020.09.07 |
[Android] Convert to Kotiln (1) | 2020.09.07 |
[Android] 안드로이드 View 요소 종류와 역할 (2) | 2020.09.06 |