안드로이드 fragment로 이동시 setTitle하는 방법.

조회수 3900회

안녕하세요. 네비게이션에 있는 fragment에 따라 툴바 제목을 변화시키고 싶은데요. Main(Fragment)도 Navigation처럼 똑같은 메뉴를 버튼으로 나열했는데요. 처음 Main(Fragment)에서 버튼을 눌렀을 때 해당 fragment에 setTitle이 되는 것도 성공하고, 네비게이션에서 다른 메뉴를 선택했을 때도 setTitle이 되는 것도 성공하였습니다. 그런데, 네비게이션에서 홈 메뉴(Main-Fragemt)를 들어가서 다른 메뉴를 누르면 setTitle이 되지 않습니다. 여러 가지의 방법으로 시도를 하였으나, 모두 실패하였습니다. 어떻게 setTitle을 할 수 있을까요?

MainActivity.java

@Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        Fragment fragment = null;
        String title = getString(R.string.app_name);

        if (id == R.id.nav_home) {
            fragment = new Main();
            title = "";

        } else if (id == R.id.nav_order) {
            fragment = new OrderManage();
            title = "주문관리";
        }

        if (fragment != null) {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.content_fragment_layout, fragment);
            ft.commit();
        }

        if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle(title);
        }

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

    //다른 Fragment로 이동.
    public void replaceFragment(Fragment fragment) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.content_fragment_layout, fragment).commit();
    }

주문관리(OrderManageFragment)

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_order_manage, container, false);
        getActivity().setTitle("주문관리");

MainFragment

@Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.orderManageCV:
                ((MainActivity) getActivity()).replaceFragment(OrderManage.newInstance());
                break;
        }
    }

이미지

  • Main이 프래그먼트라고 하셨는데 그 메인 프래그먼트를 서비스하는 메인 액티비티랑 스타일 xml 코드좀 볼 수 있을까요? 김은기 2019.8.25 10:20

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    현재 프래그먼트는 MainActivity 에서 관리하는 것으로 보이는데요. MainActivity에 액션바를 핸들링할 수 있는 메서드를 만들고, 프래그먼트가 onResume 될 때마다 또는 적절한 생명주기에 타이틀을 수정하는 방법이 있습니다. 이 방법으로 시도해보셨나요?

    • MainActivity

      public void setActionBarTitle(String title) {
          ActionBar actionBar = getSupportActionBar();
          if (actionBar != null) {
              actionBar.setTitle(title);
          }
      }
      
    • Something Fragment

      @Override
      public void onResume() {
          super.onResume();
          FragmentActivity activity = getActivity();
          if (activity != null) {
              ((MainActivity) activity).setActionBarTitle("타이틀");
          }
      }
      
    • 정말 감사합니다! 해결되었어요!!!:) 궁금이 2019.8.26 23:05
    • ㅎㅎ 다행이네요 :D 김선우 2019.8.27 08:53

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

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

(ಠ_ಠ)
(ಠ‿ಠ)