안드로이드 맵 프래그먼트 질문이요!

조회수 2028회

구글맵을 프래그먼트로 만들지않고 액티비티상(?)에 띄우고있습니다. R.id.home 눌렀을때는 특정 좌표가 찍히는 지도가나오고, R.id.nav_record_section 눌렀을 때는 따로 만들어둔 프래그먼트화면이 띄워지고, R.id.nav_edit 눌렀을때 마찬가지로 따로 만들어둔 프래그먼트가 화면에 띄워집니다.

문제는 홈에서 다른 네비게이션 아이템을 클릭했을때는 잘 넘어가는데 따로 만들어둔 프래그먼트로 넘어갔다가 다시 홈화면으로 넘어오면 'java.lang.NullPointerException' 에러가 뜹니다....

혹시 이걸 개선하려면...

  1. 구글맵도 따로 프래그먼트화 시켜야하나요??
  2. 다른 네비게이션 아이템을 클릭했다가도 홈을 클릭하면 이전에 가지고있던 위치정보같은것은 못불러오나요??
 public boolean onNavigationItemSelected(MenuItem item)
{
     int id = item.getItemId(); 
     Fragment fragment = null;

        FragmentManager fragmentManager = getFragmentManager();
        final RelativeLayout layout_summaryData = (RelativeLayout) findViewById(R.id.layout_summaryData);
        final RelativeLayout layout_ridingData = (RelativeLayout) findViewById(R.id.layout_ridingData);

        if (id == R.id.nav_home) {
            Log.e(TAG, "네비 홈 눌렸다!");
            navigationView.setCheckedItem(R.id.nav_home);
            layout_ridingData.setVisibility(View.GONE);
            layout_summaryData.setVisibility(View.GONE);
            fab.setVisibility(View.VISIBLE);

            fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    startLocationUpdates();
                    //fab버튼누르면 라이딩으로 바뀜.
                    navigationView.setCheckedItem(R.id.nav_riding);
                    startRiding();
                }
            });
        } else if (id == R.id.nav_record_section_info) {
            navigationView.setCheckedItem(R.id.nav_record_section_info);
            layout_ridingData.setVisibility(View.GONE);
            layout_summaryData.setVisibility(View.GONE);
            fab.setVisibility(View.GONE);
        } else if (id == R.id.nav_edit) {
            fragment = new EditFragment();
        }

        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace( R.id.fragment_place, fragment );
        fragmentTransaction.commit();

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

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

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

(ಠ_ಠ)
(ಠ‿ಠ)