lateinit var mContext: String
var mContext : String?=null
.?연산자는 앞의 변수가 Null 이 아닐때만 수행되고 null이면 null 을 반환함
Null값을 포함하는 변수는 nullable 유형이어야 함.
fun Calculator(a:Int , b:Int ):Int { return a+b }
여기서 a 혹은 b 에 null이 들어오면 NullPointException이 발생함.
fun Calculator(a: Int? ,b : Int?) :Int? {
var result :Int?=null
if(a!=null &&b!=null) {
result = a+b
return result
}else {
}
return result
}
Ex) 데이터를 다룰 시 객체를 만들어서 객체안의 변수에 데이터를 대입하는데 .
class sampledata(
val title:String,
val description: String
)
처음에는 문제가 없지만. 만약 데이터 양이 늘어날시 .
class sampledata(
val title:String,
val description: String,
val image : String,
val name : String,
val nickname : String? = null,
val email : String?=null,
val password : String?=null
)
초기화 해주는 것. 객체를 만들 때 쓰고 싶은 인자가 있고 안쓰고 싶은 인자가 있기 때문에 이런식으로 구현을 한다.
Elvis Operator
fun getdata(data:String?) {
val mydata = data ?:"ㅎㅎ"
}
코드를 작성하다보면 null 인경우 default 값을 주고 싶은 경우가 있음. 이럴때 Elvis연산자를 쓰면 된다
강제 NotNull 처리
fun Calculator(a: Int? ,b : Int?) :Int {
var result :Int?=null
if(a!=null &&b!=null) {
result = a+b
return result
}else {
//그 외 에 해당하는 로직 처리
}
return result!!
}
!!을 쓰면 그 변수는 무조건 Null이 아니라는 것을 명시해줌
잘 쓰지 말라고 하는데 나는 많이 썻음.
When For While
fun fizzBuzz(i: Int) = when {
i % 15 == 0 -> "FizzBuzz "
i % 3 == 0 -> "Fizz "
i % 5 == 0 -> "Buzz "
else -> ""+i
}
for ( i in 0 until 10) {
}
//ArrayList String 타입으로 생성한다
var list = ArrayList<String>()
//다른 초기화 방법
lateinit var list2 :ArrayList<String>
list.add(":a")
list2.add("a")
예시 1 ArrayList 는 리스트 , 즉 데이터를 다루는 부분이기 때문에
사용자가 데이터를 입력하면 그 데이터를 내가 설정한 클래스로 넣는다.
class mydata(
val title : String?=null,
val description : String ?=null
)
여기선 for 문을 통해 데이터를 임시로 만들어줌. 앱 을 만들때 이 부분에서 데이터베이스랑 연동한다.
var mylist = ArrayList<mydata>()
for( i in 0 until 10 ) {
val sample = mydata(title=""+i,description = ""+i)
mylist.add(sample)
}
val textview :TextView = findviewById(R.id.~~)
val btnlogin :Button = findViewById(R.id.btn_login)
btnlogin.setOnClickListener {
sample2()
}
btn_login.setOnClickListener {
sample2()
}
StartActivity()
1.화면 이동
btnlogin.setOnClickListener {
startActivity(Intent(this,sample3::class.java))
//val intent = Intent(this,sample::class.java))
// startActivity(intent)
}
btn_login.setOnClickListener {
sample2()
}
fun sample2(){
val intent = Intent(this,sample3::class.java)
intent.putExtra("sample2","뭘봐")
startActivity(intent)
}
데이터를 보냈으니 받는 곳이 있어야 겟지 ?
class sample3 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sample3)
//intent 로 받은 데이터를 getStringExtra 로 받아줌
//그리고 setText를 통해 text를 바꿔줌
val getintent = intent.getStringExtra("aa")
text_sample3.setText(getintent)
//여기는 startactivityforREsult 예제
val exintent = Intent()
exintent.putExtra("result","hi")
setResult(Activity.RESULT_OK,exintent)
finish()
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
tools:context=".sample3">
<TextView
android:id="@+id/text_sample3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="aaaa"
android:textSize="36dp" />
</LinearLayout>
StartActivityforResult()
fun sample2_1() {
val intent = Intent(this,sample3::class.java)
//아까와 달리 인자값으로 intent 뿐만 아니라 하나가 더 넘어감
//이 상수는 나중에 sample3로 부터 결과값은 받아온 후 어떤 요청에 따른 결과인지를 구분하기 위한
//requestCode임
startActivityForResult(intent,200)
}
//결과값 받는 부분
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode==200) {
if(resultCode== Activity.RESULT_OK){
//여기서 내가 하고싶은 작업을 하면됨.
}
}
}
startActivity() 는 단순히 어떠한 액티비티를 시작하기 위한 용도로 사용된다면,
startActivityforResult() 는 시작한 액티비티를 통해 결과값을 받기 위해 사용되는 것 .
그래서 왜 쓰는데 ?
레이아웃을 짜면서 그 레이아웃은 한 화면이라는 걸 알게 됬고 하나의 앱은 무수히 많은 Activity 로 이루어 져 있다는 걸 느낌
특정 기능 UX/UI 흐름에 따라 여러가지 Activity를 구성해두었을때 , 각 기능에 맞는 Activity를 호출한다거나 할때 사용되는 것이 startactivity() ,startActivityforResult()
숙제 = startActivityforResult 공부해오기