developer tip

Android 툴바 다른 조각에 대한 메뉴 항목 추가

optionbox 2020. 11. 3. 07:56
반응형

Android 툴바 다른 조각에 대한 메뉴 항목 추가


툴바와 탐색 서랍이 있습니다. 앱을 시작하면 툴바와 탐색 창이 생성됩니다. 탐색 창에서 항목을 클릭하면 새 조각이 시작되고 동일한 도구 모음이 유지됩니다. 기본적으로 특정 조각을 시작할 때 검색, 추가, 편집과 같은 메뉴 항목을 도구 모음에 추가하는 방법은 무엇입니까? 프로그램 시작시 원하지 않지만 동적으로 생성되었습니다. 또한이 버튼을 클릭하여 다른 조각을 시작하도록하려면 어떻게해야합니까? 한 조각에서 도구 모음의 편집 단추가 다른 조각의 편집 단추에 비해 특정 작업을 수행하기를 원합니다. 감사!

Menu_toolbar :

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item android:id="@+id/edit"
    android:orderInCategory="1"
    android:title="Edit"
    app:showAsAction="always"
    android:icon="@drawable/pencil_icon"/>
<item android:id="@+id/add"
    android:orderInCategory="1"
    android:title="Add"
    app:showAsAction="always"
    android:icon="@drawable/plus_icon"/>

도구 모음 :

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="#10a1ff"
android:title="Home"
/>

조각에 유사한 코드를 추가합니다.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
{
    View v = inflater.inflate(R.layout.library_fragment, parent, false);
    setHasOptionsMenu(true);
    return v;
}


@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
   inflater.inflate(R.menu.your_menu_xml, menu);
   super.onCreateOptionsMenu(menu, inflater);
}

이렇게하면 조각에 대한 메뉴를 사용자 지정할 수 있습니다.


이것은 메뉴를 동적으로 만드는 방법입니다 : http://www.101apps.co.za/index.php/articles/using-toolbars-in-your-apps.html

편집 :

Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar);
setSupportActionBar(actionBarToolBar);
actionBarToolBar.setNavigationIcon(R.drawable.icon);
actionBarToolBar.setNavigationContextDescription(getResources().getString(R.string.desc);
actionBarToolBar.setLogo(R.drawable.other_icon);
actionBarToolBar.setLogoDescription(getResources().getString(R.string.other_desc);
actionBarToolBar.inflateMenu(R.menu.fragment_menu);

가장 좋은 방법은 다음과 같습니다.

1. 활동에서 툴바를 찾아서 supportActionBar로 설정합니다.

Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar);
setSupportActionBar(actionBarToolBar);

2. 그런 다음 동일한 활동에서 다른 조각에 대한 옵션 메뉴를 처리하는 것은 케이크 조각이 될 것입니다. 원하는대로 각 조각에서 다음 작업을 수행하십시오.

OnCreateView 메서드 호출에서

setHasOptionsMenu(true);

그리고 마지막으로

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.main, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

메뉴 항목 클릭을 관리하기 위해 onOptionsItemSelected가 있습니다.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_search :
            Log.i("item id ", item.getItemId() + "");
        default:
            return super.onOptionsItemSelected(item);
    }
}

onCreateOptionsMenu모든 조각에서 메서드를 재정의 하십시오.

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.your_menu_xml, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

이 문제를 올바르게 해결했습니다. 내 솔루션은 다음 코드와 같습니다.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    mRootView = inflater.inflate(R.layout.fragment_order_history, container, false);
    //getActivity().invalidateOptionsMenu();


    setHasOptionsMenu(true);

    return mRootView;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.main, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

나는 같은 문제가 있었고 표시된 조각에 따라 도구 모음 메뉴를 바꾸고 싶었습니다.

지금 직면 한 문제는 메뉴가 이전 메뉴에 추가된다는 것입니다.

조각에 대한 메뉴 만 표시하려면 다음을 제안합니다.

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
     menu.clear(); //Empty the old menu
     inflater.inflate(R.menu.menu_fragment1, menu);
     super.onCreateOptionsMenu(menu, inflater);
}

Hope it'll help.


Below are the steps to show different menu options with different fragments.

Step1: Call setHasOptionsMenu(true)

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        setHasOptionsMenu(true)
        super.onViewCreated(view, savedInstanceState)

    }

Step2: Inflate your fragment related option menu items.

override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
    // To clear previously added menu items
    menu?.clear()
    inflater?.inflate(R.menu.your_fragment_menu, menu)
    super.onCreateOptionsMenu(menu, inflater)
}

참고URL : https://stackoverflow.com/questions/30721664/android-toolbar-adding-menu-items-for-different-fragments

반응형