안드로이드 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;
}
}
1 답변
-
현재 프래그먼트는 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("타이틀"); } }
댓글 입력