본 게시글은
'Do It! 안드로이드 프로그래밍 개정7판' / '단계별로 배우는 안드로이드 프로그래밍'
두 권의 교재를 통해 학습한 내용을 스스로 정리하는 목적으로 작성한 게시글 입니다.
Do It 안드로이드 프로그래밍의 '도전! 08'을 해결해보고자 한다.
우선 로그인 화면, 메인메뉴 화면, 서브메뉴 화면을 만들어 주었다.
로그인 화면에서 로그인 버튼을 눌렀을 때 메인메뉴로 갈 수 있게 리스너를 등록한다.
이때 아이디와 비밀번호 모두 입력이 되어 있는지 체크해야 한다.
public class MainActivity extends AppCompatActivity {
public final int LOGIN = 101;
EditText editTextId, editTextPW;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextId = findViewById(R.id.editTextId);
editTextPW = findViewById(R.id.editTextTextPassword);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (editTextId.getText().toString().equals("")) {
Toast.makeText(getApplicationContext(), "아이디를 입력하세요.", Toast.LENGTH_SHORT).show();
} else if (editTextPW.getText().toString().equals("")) {
Toast.makeText(getApplicationContext(), "비밀번호를 입력하세요.", Toast.LENGTH_SHORT).show();
} else {
Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
startActivityForResult(intent, LOGIN);
}
}
});
}
}
아이디나 비밀번호가 비어있다면 토스트를 띄워 입력을 요구하는 메세지를 보내고,
다 채워져 있다면 메인 메뉴 액티비티로 넘어간다.
다음으로 메인 메뉴 액티비티의 버튼들에 함수를 연결지어 줄 것이다.
서브 메뉴는 사진에서 만든 것처럼 하나만 만들고, 각 버튼마다 다르게 디자인 하는 식으로 꾸미고자 한다.
서브 메뉴 액티비티 3개를 따로 만드는건 귀찮으니까 ㅋㅋ
public class MenuActivity extends AppCompatActivity {
public final int CUSTOMER = 101, SELL = 102, STOCK = 103;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
}
public void onButtonClicked(View v) {
Intent intent = new Intent(this, SubMenu1.class);
switch (v.getId()) {
case R.id.button1: // 고객 관리
startActivityForResult(intent, CUSTOMER);
break;
case R.id.button2: // 매출 관리
startActivityForResult(intent, SELL);
break;
case R.id.button3: // 상품 관리
startActivityForResult(intent, STOCK);
break;
}
}
}
이제 서브 메뉴의 버튼들에도 코드를 달아준다.
public class SubMenu1 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub_menu1);
Button buttonToLogin = findViewById(R.id.button1);
Button buttonToMenu = findViewById(R.id.button2);
buttonToLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("to", "login");
setResult(RESULT_OK, intent);
finish();
}
});
buttonToMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("to", "menu");
setResult(RESULT_OK, intent);
finish();
}
});
}
}
사실 이 부분에서 고민이 좀 많았다.
로그인 버튼을 눌렀을 때 바로 로그인 화면으로 돌아가야 하는데,
로그인 액티비티를 새로 띄우자니 새로운 액티비티가 만들어져 버려서
onActivityResult 메소드가 작동하지 않을 것 같았다.
플래그를 떠올려봤으나, 아직 책에서는 개념 소개만 하고 구현 방법은 설명하지 않아서
아직 플래그를 활용하기는 힘들어 보였다.
그래서 메인 메뉴에서 인텐트에 들어있는 최종 목적지 데이터를 체크하고,
최종 목적지가 login 인 경우, 메인 메뉴에서 한번더 finish() 메소드를 실행시키는 방법을 떠올렸다.
이제 메인 메뉴의 onActivityResult 메소드를 설정한다.
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Intent recvIntent = data;
String from="", to = recvIntent.getStringExtra("to");
switch (requestCode) {
case CUSTOMER:
from = "customer";
break;
case SELL:
from = "sell";
break;
case STOCK:
from = "stock";
break;
}
if (to.equals("login")) {
Intent sendIntent = new Intent();
sendIntent.putExtra("to", "login");
sendIntent.putExtra("from",from);
setResult(RESULT_OK, sendIntent);
finish();
} else if (to.equals("menu")) {
Toast.makeText(this, "it comes from " + from, Toast.LENGTH_SHORT).show();
}
}
목적지가 login 인지 확인하고, login 이면 다시 인텐트를 만들어 setResult를 수행하고
액티비티를 종료하도록 하였다.
menu가 목적지였다면 그에 맞게 토스트를 띄워주도록 하였다.
마지막으로 로그인 화면에서 토스트를 띄워주도록 설정한다.
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Intent recvIntent = data;
if (recvIntent.getStringExtra("to").equals("login")) {
Toast.makeText(this, "It comes from" + recvIntent.getStringExtra("from"), Toast.LENGTH_SHORT).show();
}
}
잘 실행되는지 확인해보았다.
성공적으로 동작하는 모습을 확인 할 수 있다
다음에는 프래그먼트에 대한 내용을 정리해보고자 한다.
'Android > Java' 카테고리의 다른 글
[안드로이드] getWidth() 와 getMeasuredWidth() (0) | 2021.03.20 |
---|---|
[안드로이드] Constraint Layout 동적 생성 후 동적으로 뷰 추가하기 (0) | 2021.03.20 |
[안드로이드] 프래그먼트(Fragment) (0) | 2021.01.03 |
[안드로이드] 인텐트 활용 : 데이터 교환(1) (0) | 2021.01.01 |
[안드로이드] 인텐트의 개념 (0) | 2021.01.01 |