# PRJ_3. 커뮤니티 게시판 앱_(2) 회원가입, 닉네임 설정 화면

728x90

🟦 35강. 회원가입 화면 구성

▶️ ‘회원 가입’ 화면 구성

  • 로그인 화면 속 ‘회원가입’ 버튼 클릭 시, → 회원가입 화면으로 전환
  • 사용자로부터 아이디와 비밀번호만 입력받음
  • ‘다음’ 버튼 클릭 시, → 닉네임 설정 화면으로 전환

◾ JoinFragment.kt

package com.example.app3_communityapp

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.example.app3_communityapp.databinding.FragmentJoinBinding

class JoinFragment : Fragment() { //'회원가입' 프래그먼트
    //바인딩 설정
    lateinit var joinFragmentBinding : FragmentJoinBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        //바인딩 연결
        joinFragmentBinding = FragmentJoinBinding.inflate(inflater)
        //프래그먼트 상단 '툴바' title 지정
        joinFragmentBinding.joinToolbar.title= "회원가입"

        // 회원가입 화면에서 '다음' 버튼 클릭 시 -> 닉네임 설정 화면으로 전환 이벤트 처리
        joinFragmentBinding.joinNextBtn.setOnClickListener{
val act =activityas MainActivity
            act.fragmentController("nick_name", true, true)
}

return joinFragmentBinding.root
}

}

▶️ ‘닉네임 입력’ 화면 구성

  • 닉네임 입력 후 ‘가입 완료’ 버튼 클릭 시, → 로그인 화면으로 전환

◾NickNameFragment.kt

package com.example.app3_communityapp

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.example.app3_communityapp.databinding.FragmentNickNameBinding

class NickNameFragment : Fragment() { // '닉네임 입력' 프래그먼트
    //바인딩 설정
    lateinit var nickNameFragmentBinding : FragmentNickNameBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment

        nickNameFragmentBinding = FragmentNickNameBinding.inflate(inflater)
        //툴바 제목 설정
        nickNameFragmentBinding.nicknameToolbar.title= "닉네임 설정"

        return nickNameFragmentBinding.root
}

}

◾MainActivity.kt

  • 이 액티비티 객체 속에 만들어뒀던 fragmentController()
class MainActivity : AppCompatActivity() { //'메인' 액티비티
    //바인딩 설정
    lateinit var mainActivityBinding : ActivityMainBinding
    // 프래그먼트 담을 변수 선언
    lateinit var currentFragment : Fragment

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        mainActivityBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(mainActivityBinding.root)
        //프래그먼트 컨트롤 메소드
        fragmentController("login", false, false)
    }

    //이 메인 액티비티가 관리할 프래그먼트 화면들을 컨트롤할 메소드
    // (프래그먼트 이름/ 백 스택에 추가 여부 / 애니메이션 동작 사용 여부)
    fun fragmentController(name:String, add:Boolean, animate:Boolean) {

        //1) 띄울 프래그먼트 이름받아서 생성
        when(name) {
            "login" -> {
                currentFragment = LoginFragment()
            }
            "join" -> {
                currentFragment = JoinFragment()
            }
            "nick_name" -> {
                currentFragment = NickNameFragment()
            }
        }
        //트랜잭션으로 띄울 현재의 프래그먼트 띄움
        val trans =supportFragmentManager.beginTransaction()
        trans.replace(R.id.main_container, currentFragment)

        //2) 백 스택에 추가 여부 따라서 ("뒤돌아가기 기능"동작 위해서 사용) - T: 뒤로가기 F:종료
        if(add == true) {
            trans.addToBackStack(name)
        }

        //3) 애니메이션 사용 여부에 따라서
        if(animate == true) {
            trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        }

        trans.commit() // 프래그먼트 동적 제어 - 화면에 위의 상황을 적용하는 메소드

    }

}

🟧 ‘닉네임 설정’ 버튼 후 → 액티비티 완전 종료 처리

  • 현재 앱은 로그인 시도 or 회원가입 시도 후 닉네임 설정까지 완료되면 ‘뒤로 가기’ 버튼 눌러도 완전히 새로운 액티비티 창을 켜야 하기 때문
    // 백 스택에 저장된 프래그먼트들을 완전히 종료하기 위함
    // 로그인 시도가 완료된 뒤에는 '뒤로가기' 를 눌러도 액티비티가 종료되어야 한다.
    nickNameFragmentBinding.nicknameJoinBtn.setOnClickListener{
    val mainIntent = Intent(requireContext(), MainActivity::class.java)
        startActivity(mainIntent)
    activity?.finish()
    }
    
  • ◾NickNameFragment.kt 속 onCreateView() 메소드 내부

🟧 ‘로그인’ 버튼 클릭 시 → 액티비티 완전 종료 처리

  • ‘로그인’ 버튼 클릭 후에는 ‘게시판 메인’ 액티비티로 새롭게 화면 전환되어야 함.
  • ◾LoginFragment.kt 속 onCreateView() 메소드 내부에 추가
// '로그인' 버튼 클릭 시, 이벤트 처리 :
loginFragmentBinding.loginLoginbtn.setOnClickListener{
val boardMainIntent = Intent(requireContext(), BoardMainActivity::class.java)
    startActivity(boardMainIntent)
activity?.finish()
}

728x90