Skip to content

MK-SideProject/personality-style-test-release2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

유형테스트.zip

logo_main

특정 상황에서의 성격 유형 테스트와 유머스러운 소재로 만든 유머 테스트, 찐 성격 테스트에서 나의 성격 유형과 어울리는 성격 유형 궁합까지 지루한 시간을 즐겁게 해주는 유형 테스트 모음집 어플입니다!


리팩토링2


개요


설명

✔ Main

유형테스트1

  • 어플 첫 시작시 로고가 몇 초간 보여지고 메인 화면으로 이동합니다
  • 위의 이미지가 어플 메인화면입니다

✔ 유형테스트

유형테스트2

  • 메인화면에서 유형테스트 버튼을 누르면 나오는 화면입니다
  • 각각의 상황에 따라 유형 테스트를 할 수 있습니다

✔ 유형테스트 결과

KakaoTalk_20211227_163614443

  • 모든 테스트에 대한 결과화면은 위와 비슷한 느낌으로 나옵니다
  • 결과화면에서는 다시하기 버튼과 목록으로 돌아가는 버튼이 있어 사용자가 사용하기 쉽게 구현을 했습니다

✔ 유머 테스트

유형테스트3

  • 메인화면에서 유머테스트 버튼을 누르면 나오는 화면입니다
  • 기존의 성격 테스트나 유형테스트보다는 유머스러운 소재를 가지고 있는 테스트들 입니다

✔ 성격유형 테스트

  

  • 메인화면에서 찐테스트 버튼을 누르면 나오는 화면입니다.
  • 성격유형테스트에서 시작하기 버튼을 누르면 2번째 이미지처럼 성격유형테스트를 할 수 있습니다

✔ 궁합 테스트

유형테스트4

  • 메인화면에서 궁합 버튼을 누르면 나오는 화면입니다.
  • 찐테스트에서 성격유형테스트를 하고 나온 결과를 입력하면 다른 유형들과 궁합을 보여주는 기능을 가지고 있습니다

추가된 기능 설명

  • 플레이스토어에 추가된 기능 설명 부분 입니다.

플레이스토어 기능 추가

✔ 다시하기, 목록, 공유 버튼

다시하기, 목록, sns 버튼 공유


- 다시하기 버튼 클릭시 테스트 첫 화면으로 옮겨집니다. - 목록 버튼 클릭시 선택했던 유형테스트 목록 모음집으로 옮겨집니다. - sns 버튼 공유 클릭시 공유창이 나타납니다
  • sns 공유버튼 클릭시 나오는 화면

sns 공유 버튼 클릭


주요 코드 설명

리스트 코드 설명
- 각 리스트뷰는 아이템리스트와 아이템 어댑터로 이루어져 있습니다
- 아이템 리스트는 아래 코드와 같습니다
<pre><code> 
public PersonalityItem(String title_resource1, String description_resource1, String time_resource1, int img_resource1){
   this.title_resource1 = title_resource1;
   this.description_resource1 = description_resource1;
   this.time_resource1 = time_resource1;
   this.img_resource1 = img_resource1;
 }

- 어댑터를 사용해 아이템 리스트를 가져왔습니다. 주요 코드는 아래와 같습니다.

    @Override
        public View getView(int position, View convertView, ViewGroup parent){
            PersonalityItemView personalityItemView = null;
            if(convertView ==null){
                personalityItemView = new PersonalityItemView(getApplicationContext());

            }else{
                personalityItemView = (PersonalityItemView)convertView;
            }
            PersonalityItem item = items.get(position);
            personalityItemView.setTitle_resource1(item.getTitle_resource1());
            personalityItemView.setDescription_resource1(item.getDescription_resource1());
            personalityItemView.setTime_resource1(item.getTime_resource1());
            personalityItemView.setImg_resource1(item.getImg_resource1());
            return personalityItemView;
        }
  
테스트 코드 설명
- 테스트는 질문에 대한 버튼을 눌러 다음 프래그먼트로 값을 넘겨주는게 중요했습니다.
- 번들에 값을 담아 다음 프래그먼트로 데이터를 넘겨주는 코드는 다음과 같습니다. - FragmentTransaction의 replace 함수를 사용해 다음 프래그먼트로 교체합니다.

bankingTest3_an1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    //번틀 값 설정
                    bundleNext.putString("bankingTestResult1",bankingTestResult1);
                    bundleNext.putString("bankingTestResult2",bankingTestResult2);
                    bundleNext.putString("bankingTestResult3",bankingTestResult3);
                    //다음 프래그먼트로 값 이동
                    bankingTest4.setArguments(bundleNext);

                    //이동
                    transaction.replace(R.id.bankingtest_start_fragment, bankingTest4);

                    transaction.addToBackStack(null).commit();
                }
            });
   
테스트 결과 코드 설명
- 마지막으로 값을 넘겨받은 마지막 프래그먼트에서 테스트 결과를 어떻게 마무리했는지 설명해드리겠습니다
- 위에서 설명한 것과 같이 버튼에 대한 값을 넘겨 받고 마지막에 if문으로 조건에 대한 처리를 했습니다.

bankingTest6_an1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                if(bankingTestResult3 != null && bankingTestResult3.equals("result3") ){
                    //이동
                    transaction.replace(R.id.bankingtest_start_fragment, bankingTestResult3Fg);
                    transaction.addToBackStack(null).commit();

                }
                else if(bankingTestResult1 != null && bankingTestResult1.equals("result1")){


                    transaction.replace(R.id.bankingtest_start_fragment, bankingTestResult1Fg);
                    transaction.addToBackStack(null).commit();
                }
                else{

                    transaction.replace(R.id.bankingtest_start_fragment, bankingTestResult2Fg);
                    transaction.addToBackStack(null).commit();

                }


            }
        });

- 안드로이드에서 if문에 아무 처리가 없다면 null값 등 충돌이 있기에 if문의 코드를 아래와 같이 작성했습니다.

    if(bankingTestResult3 != null && bankingTestResult3.equals("result3") )
    
- 그냥 ==을 사용하면 값을 읽어오지 못하기 때문에 equals를 사용해야하는 점이 이 코드의 주의할 점 입니다.
다시하기, 목록, sns 공유 버튼
- 새로 추가한 다시하기, 목록, sns 공유 버튼 코드에 대해서 설명하도록 하겠습니다.
- 다시 하기 버튼을 클릭시 현재 액티비티가 null이 아니라면 현재 프래그먼트가 실행되고 있는 액티비티를 종료하고 해당 테스트 액티비티를 실행 시켜줍니다.

    //다시하기 버튼
      bankingTestRestart.setOnClickListener(new View.OnClickListener() {
      @Override
        public void onClick(View view) {
          if (thisActivity != null) {
              //현재 액티비티가 null이 아니라면 액티비티 실행후
              startActivity(new Intent(thisActivity, BankingTestActivity.class));
             //지금껀 종료
              thisActivity.finish();
            }
        }
    });
    
- 목록 버튼 클릭시 현재 실행되고 있는 액티비티를 종료하면 그전에 테스트를 진행하기 앞서 실행 되었던 목록 액티비티가 나오게 됩니다.

bankingTestList.setOnClickListener(new View.OnClickListener() {
        @Override
      public void onClick(View view) {
          //현재 액티비를 가져온다
          if (thisActivity != null) {
          //지금껀 종료
          thisActivity.finish();
          }
      }
  });
	
- sns 공유 버튼 클릭시 해당 결과에 대해 공유와 함께 플레이스토어 링크로 연결 될 수 있게끔 설정 되어 있습니다.

bankingTestShare.setOnClickListener(new View.OnClickListener() {
     @Override
      public void onClick(View view) {
      Intent sharingIntent = new Intent(Intent.ACTION_SEND);
      sharingIntent.setType("text/plain");
      //결과 내용 + 어플링크
      sharingIntent.putExtra(Intent.EXTRA_TEXT, "금융테스트 결과 - 완벽한 재테크 고목인 당신! \n" + "https://play.google.com/store/apps/details?id=com.mk.personality_style_test&hl=ko");
      startActivity(Intent.createChooser(sharingIntent, "결과를 공유할 앱을 선택해주세요"));
  }

});


✍ 개선사항

  • 액티비티 창이 여러개 쌓여있는 형태라 마지막 결과창에서 목록이나 다시하기 버튼을 누르지 않는다면 이용하는 데 조금 불편함이 있다는걸 인지하고 있습니다
  • 이에 대해선 프래그먼트 형식으로 바꾸거나 뒤로가기 버튼을 눌렀을 때 모든 액티비티 종료가 되는 기능을 추가해 개선해보는 것을 고려하고 있습니다.

✍ 리팩토링

  • 위에 개선 사항을 반영하여 리팩토링을 하였습니다.

  • 먼저, 테스트 창이 액티비티로 구성되어 테스트를 진행 할 수 록 액티비티가 쌓이는 형태를 하나의 액티비티에 프래그먼트를 여러개 사용 할 수 있게끔 개선을 하였습니다.

  • 위와 같이 변경한 이유는 액티비티가 여러개 실행되는 점을 줄이고, 다시하기 버튼 클릭 또는 목록 버튼을 클릭시 해당 기능을 수행하는데 있어서 하나의 액티비티만 관리할 수 있게끔 하기 위해서 입니다.

  • 아래는 프래그먼트로 바꾼 코드 일부분 입니다.

public class BankingTest3 extends Fragment {
    //결과값 이동
    private String bankingTestResult1;
    private String bankingTestResult2;
    private String bankingTestResult3;
    public BankingTest3() {
    }
    public static BankingTest3 newInstance() {
        BankingTest3 fragment = new BankingTest3();
        Bundle args = new Bundle();
        return fragment;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        //뷰 선언
        View bankingTest3 = inflater.inflate(R.layout.fragment_banking_test_3, container, false);
        Button bankingTest3_an1 = (Button) bankingTest3.findViewById(R.id.bankingtest_3_an1);
        Button bankingTest3_an2 = (Button) bankingTest3.findViewById(R.id.bankingtest_3_an2);
        Button bankingTest3_an3 = (Button) bankingTest3.findViewById(R.id.bankingtest_3_an3);
        //전달한 번들 메소드 받기
        Bundle bundle = getArguments();
        //값이 있다면
        if(bundle != null) {
            bankingTestResult1 = bundle.getString("bankingTestResult1");
            bankingTestResult2 = bundle.getString("bankingTestResult2");
            bankingTestResult3 = bundle.getString("bankingTestResult3");
            //데이터 전달 및 프래그먼트 변경
            BankingTest4 bankingTest4 = new BankingTest4();
  • 위에 번틀 메소드를 받고 데이터를 전달하는 부분에 있어서 초기 코드 같은 경우 중복된 코드가 많았으나 현재 리팩토링을 통해서 중복코드를 최소한으로 줄였습니다.

✍ 후기

  • 어플을 만드는 것을 쉽게 생각했는데 컨텐츠 개발에 시간이 제일 많이 걸렸던 것 같습니다
  • 플레이스토어에 배포까지 구글 콘솔 개발자 계정 등록부터 심사과정이 오래 걸리는 걸 보고 다음에 프로젝트를 한다면 이 기간까지 염두하고 해야한다는 걸 배울 수 있었습니다

new)

  • 모든 테스트 액티비티를 프래그먼트로 바꾸는 과정이 시간이 많이 걸려 힘들었습니다. 개발하기 전에 구현에 있어서 어떤 걸 사용할지 충분하게 고민을 하고 계획을 세워야 하는 점을 깨달았습니다.
  • 리팩토링하면서 중복 코드를 개선하면서 코드의 재사용성에 대해서 공부할 수 있는 시간이었습니다.

개발자

김수빈 장민주
subinkim26 minm063

About

[리팩토링]유형테스트, 유머테스트, 성격유형테스트, 궁합등을 볼 수 있는 어플입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages