Android 片段更改标题

新手上路,请多包涵

我的片段有问题。基本上,我有一个应用程序,它有一个导航抽屉和 4 个活动按钮。当按下每个按钮时,它将显示另一个片段。我遇到的问题是我想在 ActionBar 上显示正确的标题。我可以在 ActionBar 的导航中显示所选项目。但是当我按下按钮转到另一个片段时,我无法在 ActionBar 上显示标题。有任何想法吗?

这是我的示例代码: HomeActivity.class

  private void displayView(final int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new HomeFragment();
            break;
        case 1:
            fragment = new MyProfileFragment();
            break;
        case 2:
            fragment = new AboutFragment();
            break;
        default:
            break;
    }

    if (fragment != null) {
        fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        drawer.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }

}

主页片段:

 public class HomeFragment extends Fragment {

public HomeFragment() {
}

CardView card_cart, card_scan, card_categories, card_about;
Intent i;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_home, container, false);
    initControls(rootView);
    return rootView;
}

private void initControls(View rootView) {

    card_cart = (CardView) rootView.findViewById(R.id.card_cart);
    card_scan = (CardView) rootView.findViewById(R.id.card_scan);
    card_categories = (CardView) rootView.findViewById(R.id.card_categories);
    card_about = (CardView) rootView.findViewById(R.id.card_about);

    card_categories.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            i = new Intent(getActivity(), CategoriesActivity.class);
            startActivity(i);
        }
    });

    card_cart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MyCartFragment nextFrag = new MyCartFragment();
            getFragmentManager().beginTransaction()
                    .replace(R.id.frame_container, nextFrag)
                    .addToBackStack(null)
                    .commit();
        }
    });

    card_about.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AboutGrabHutFragment aboutFrag = new AboutGrabHutFragment();
            getFragmentManager().beginTransaction()
                    .setBreadCrumbTitle(getResources().getString(R.string.about))
                    .replace(R.id.frame_container, aboutFrag)
                    .addToBackStack(null)
                    .commit();

        }
    });

    card_scan.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            i = new Intent(getActivity(), ScanActivity.class);
            startActivity(i);
        }
    });

}

HomeFragment 中会找到这 4 个按钮。单击按钮,将转到另一个片段。我可以用这个来显示:

 card_about.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AboutGrabHutFragment aboutFrag = new AboutGrabHutFragment();
            getFragmentManager().beginTransaction()
                    .setBreadCrumbTitle(getResources().getString(R.string.about))
                    .replace(R.id.frame_container, aboutFrag)
                    .addToBackStack(null)
                    .commit();
            getActivity().setTitle("About");

        }
    });

但问题是当我回去时,标题仍然是 About

原文由 user1410081 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 280
1 个回答

在所需片段的 onCreateView() 方法上,调用 Main Activity 的 setTitle(“”) 方法。这样你就不需要检查后压事件。

这对我有用

例如***

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.id.your_fragment_layout, container,
                false);
        getActivity().setTitle("Your actionbar title");

        return rootView;
    }

更新:

您可以通过覆盖 onResume 方法来更改标题。为了安全起见,您还可以覆盖 setUserVisibleHint 并在片段 isVisibleToUser 时更改标题。

原文由 Sachin Rao 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题