마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

간단한 코드를 합치고 싶습니다

0 추천
        // 아이디 찾기
        findId = (Button)findViewById(R.id.findId);
        findId.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), findIdPw.class);
                startActivity(intent);
            }
        });

        // 비밀번호 찾기
        findPw = (Button)findViewById(R.id.findPw);
        findPw.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), findIdPw.class);
                startActivity(intent);
            }
        });

아이디와 패스워드 찾기 화면으로 넘기는 코드입니다.

기본적으로 아이디 찾기 화면으로 연결이 되는데 툴바로 아이디 찾기 / 패스워드 찾기 탭을 만들고

클릭하면 적절한 프래그먼트로 화면을 변경하도록 코드를 작성했는데요.

 

여기 위에서는 결국 같은 화면으로 액티비티를 전환을 하고, 코드 중복이 되는 부분이 있어서 

합칠 수 있는 방법이 있는지 궁금해서 글 올립니다.

 

조언해주시면 감사하겠습니다.

매력적인수박 (670 포인트) 님이 2021년 7월 2일 질문

2개의 답변

0 추천
 
채택된 답변

listener를 변수로 저장하면 될 거 같네요.

View.OnClickListener listener = v ->
            startActivity(new Intent(getApplicationContext(), findIdPw.class));

findId = findViewById(R.id.findId);
findId.setOnClickListener(listener);

findPw = findViewById(R.id.findPw);
findPw.setOnClickListener(listener);

 

onegold (440 포인트) 님이 2021년 7월 5일 답변
매력적인수박님이 2021년 7월 6일 채택됨
0 추천

여러가지 방법이 있을 수 있을 듯 한데, 가장 쉽게 해볼 수 있는 건 FindIdPw 에 ID를 찾는지 Password를 찾는지 구분자를 넘기는 겁니다.

Intent intent = new Intent(getApplicationContext(), findIdPw.class);
startActivity(intent);

아무튼 위의 중복된 부분의 별도의 메소드로 만드세요.

// 더 적절한 이름이 있다면 그걸 사용하세요.
private void navigateToFindId() {
   navigateToFindIdPw(ForgotLoginType.ID);
}

private void navigateToFindPassword() {
   navigateToFindIdPw(ForgotLoginType.PASSWORD);
}

private void navigateToFindIdPw(FindIdPwdType findIdPwdType) {
   Intent intent = new Intent(getApplicationContext(), findIdPw.class);
   intent.putSerializable(FindPw.EXTRA_FIND_TYPE,  findIdPwdType);
   startActivity(intent);
}

public enum FindIdPwdType {
    ID,
    PASSWORD
}

 

다른 방법은 ID 찾기 화면과 Password 찾기 화면을 분리하고 로직부분을 공통된 부분을 재사용하는 겁니다. 제 생각으로는 두 화면의 구성이 거의 비슷할 것으로 보이네요. 그런데 API호출같은 비지니스 로직이 다르다면 화면을 분리하시는게 맞습니다.  이 경우는 레이아웃만 재활용하는 것이 맞다고 보여지네요.

 

spark (227,530 포인트) 님이 2021년 7월 3일 답변
...