안드로이드 bottomnavigation Fragment

조회수 564회

안드로이드 로그인화면에서 로그인을 한 후 MainActivity에 Fragment을 이용해서 bottomnavigation을 넣고 싶습니다. 그런데 fragment의 첫화면에 캘린더를 넣으려고 하는데 안되네요..

MainActivity에서

FragmentTransaction transaction = fragmentManager.beginTransaction();

transaction.replace(R.id.content_main, calenderFragment).commitAllowingStateLoss();

위 코드로 fragment의 초기 화면을 지정하면 다시 로그인 화면으로 되돌아갑니다..ㅠㅠ

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private FragmentManager fragmentManager = getSupportFragmentManager();
    private BottomNavigationView bottomNavigationView;
    private CalendarFragment calenderFragment;
    private ChattingFragment chattingFragment;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bottomNavigationView = findViewById(R.id.bottomNavigationView);

        fragment();
    }

    private void fragment() {
        calenderFragment = new CalendarFragment();//(CalendarFragment) getSupportFragmentManager().findFragmentById(R.id.content_main);
        chattingFragment = new ChattingFragment();

        bottomNavigationView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.content_main, calenderFragment).commitAllowingStateLoss();
//        getSupportFragmentManager().beginTransaction().replace(R.id.content_main, calenderFragment).commitAllowingStateLoss();
//        getSupportFragmentManager().beginTransaction().replace(R.id.content_main, calenderFragment).commit();


//        Log.i("tag", "information message : main");
    }

    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Log.i("tag", "information message");
            switch (item.getItemId()) {
                case R.id.action_calendar:
                    Log.i("tag", "information message : calendar");
                    getSupportFragmentManager().beginTransaction().replace(R.id.content_main, calenderFragment).commit();
                    break;
                case R.id.action_search:
                    Log.i("tag", "information message : search");
                    break;
                case R.id.action_chatting:
                    Log.i("tag", "information message : chatting");
                    getSupportFragmentManager().beginTransaction().replace(R.id.content_main, chattingFragment).commit();
                    break;
                case R.id.action_people:
                    Log.i("tag", "information message : people");
                    return true;
            }
            return false;
        }
    };
}

LoginActivity.java

public class LoginActivity extends AppCompatActivity {

    // 비밀번호 정규식
    private static final Pattern PASSWORD_PATTERN = Pattern.compile("^[a-zA-Z0-9!@.#$%^&*?_~]{4,16}$");

    // 파이어베이스 인증 객체 생성
    private FirebaseAuth firebaseAuth;

    // 이메일과 비밀번호
    private EditText editTextEmail;
    private EditText editTextPassword;

    private String email = "";
    private String password = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        // 파이어베이스 인증 객체 선언
        firebaseAuth = FirebaseAuth.getInstance();

        editTextEmail = findViewById(R.id.email);
        editTextPassword = findViewById(R.id.password);
    }

    public void singUp(View view) {
        TextView sinUp = (TextView) findViewById(R.id.join);

        sinUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent join = new Intent(LoginActivity.this, JoinActivity.class);
                startActivity(join);
            }
        });
    }

    public void signIn(View view) {
        email = editTextEmail.getText().toString();
        password = editTextPassword.getText().toString();

        if (isValidEmail() && isValidPasswd()) {
            loginUser(email, password);
        }
    }


    // 이메일 유효성 검사
    private boolean isValidEmail() {
        if (email.isEmpty()) {
            // 이메일 공백
            return false;
        } else if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
            // 이메일 형식 불일치
            return false;
        } else {
            return true;
        }
    }

    // 비밀번호 유효성 검사
    private boolean isValidPasswd() {
        if (password.isEmpty()) {
            // 비밀번호 공백
            return false;
        } else if (!PASSWORD_PATTERN.matcher(password).matches()) {
            // 비밀번호 형식 불일치
            return false;
        } else {
            return true;
        }
    }

    // 로그인
    private void loginUser(String email, String password) {
        firebaseAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // 로그인 성공
                            Toast.makeText(LoginActivity.this, "로그인 성공", Toast.LENGTH_SHORT).show();
                            Intent main = new Intent(LoginActivity.this, MainActivity.class);
                            startActivity(main);

                        } else {
                            // 로그인 실패
                            Toast.makeText(LoginActivity.this, "로그인 실패", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }
}

CalendarFragment.java

class CalendarFragment extends Fragment {

    MainActivity activity;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        //이 메소드가 호출될떄는 프래그먼트가 엑티비티위에 올라와있는거니깐 getActivity메소드로 엑티비티참조가능
        activity = (MainActivity) getActivity();
    }

    @Override
    public void onDetach() {
        super.onDetach();
        //이제 더이상 엑티비티 참초가안됨
        activity = null;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //프래그먼트 메인을 인플레이트해주고 컨테이너에 붙여달라는 뜻임
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.activity_calendar, container, false);

        CalendarView calendar = rootView.findViewById(R.id.calendar);
        calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
            @SuppressLint("WrongConstant")
            public void onSelectedDayChange(CalendarView view, int year,
                                            int month, int dayOfMonth) {
                Intent calendar_intent = new Intent(getActivity(), WriteDairy.class);
                startActivity(calendar_intent);
                Toast.makeText(getActivity(), "" + year + "/" +
                        (month + 1) + "/" + dayOfMonth, 0).show();
            }
        });

        return rootView;
    }
}
  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 에러로그는 없나요? 주동혁 2020.4.8 17:24

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)