Android에서 옵션 메뉴를 조각에 추가하는 방법
fragment 그룹에서 옵션 메뉴에 항목을 추가하려고 합니다.
새항만다니습들었을 .MenuFragment
클래스를 지정하고 메뉴 항목을 포함하고 싶은 조각에 대해 확장했습니다.코드는 다음과 같습니다.
Java:
public class MenuFragment extends Fragment {
MenuItem fav;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
fav = menu.add("add");
fav.setIcon(R.drawable.btn_star_big_off);
}
}
코틀린:
class MenuFragment : Fragment {
lateinit var fav: MenuItem
override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
fav = menu.add("add");
fav.setIcon(R.drawable.btn_star_big_off);
}
}
인지 어떤이그는유로그▁for는유.onCreateOptionsMenu
실행되지 않는 것 같습니다.
슈퍼 메소드 호출:
Java:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Add your menu entries here
super.onCreateOptionsMenu(menu, inflater);
}
코틀린:
override fun void onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
// TODO Add your menu entries here
super.onCreateOptionsMenu(menu, inflater)
}
코드에 로그 문을 넣어 메소드가 호출되지 않는지 또는 메뉴가 코드에 의해 수정되지 않는지 확인합니다.
또한 전화를 걸고 있는지 확인합니다.setHasOptionsMenu(boolean)
onCreate(Bundle)
조각에 옵션 메뉴 처리에 참여해야 함을 알립니다.
저도 같은 문제가 있었지만, 이 문제를 해결하기 위한 마지막 단계를 요약하고 소개하는 것이 좋을 것 같습니다.
fragment's 에 ) 추가하기HasOptionsMenu(true) 메서추가드추가▁▁in▁add▁your서hashas▁set드''opt▁fragments▁fragmentopts▁methodtrue에()men)ionsionsmenutrue(u<hnr>
onCreate(Bundle savedInstanceState)
방법.재정의
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
당신이 의 메뉴에서 싶다면) 그리고 (프래그먼트의 메뉴수려면하행을작업다른서에))onOptionsItemSelected(MenuItem item)
메서드가 포함됩니다.의 용자내 에.
onOptionsItemSelected(MenuItem item)
Activity method, 메뉴 때.onOptionsItemSelected(MenuItem item)
프래그먼트의 메서드입니다.
예:
활동
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.activity_menu_item:
// Do Activity menu item stuff here
return true;
case R.id.fragment_menu_item:
// Not implemented here
return false;
default:
break;
}
return false;
}
파편
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
....
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Do something that differs the Activity's menu here
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.activity_menu_item:
// Not implemented here
return false;
case R.id.fragment_menu_item:
// Do Fragment menu item stuff here
return true;
default:
break;
}
return false;
}
만약 당신이 찾는다면,onCreateOptionsMenu(Menu menu, MenuInflater inflater)
의 메서가않습에서 하십시오. 프래그먼트에서 다음을 호출해야 합니다.onCreate(Bundle savedInstanceState)
방법:
setHasOptionsMenu(true)
이 요한경우가 하다면.menu
을 상쾌하게 webview
특의내에 에.Fragment
사용할 수 있는 항목:
조각:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Add your menu entries here
inflater.inflate(R.menu.menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.exit:
System.exit(1);
break;
case R.id.refresh:
webView.reload();
break;
}
return true;
}
menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/exit" android:title="Exit" android:icon="@drawable/ic_action_cancel" />
<item android:id="@+id/refresh" android:title="Refresh" android:icon="@drawable/ic_action_refresh" />
</menu>
TL;DR
을 합니다.android.support.v7.widget.Toolbar
그리고 그냥 하세요:
toolbar.inflateMenu(R.menu.my_menu)
toolbar.setOnMenuItemClickListener {
onOptionsItemSelected(it)
}
독립 실행형 도구 모음
대부분의 제안된 솔루션은 다음과 같습니다.setHasOptionsMenu(true)
상위 활동의 레이아웃에 도구 모음이 있고 다음을 통해 이를 선언할 때만 작동합니다.setSupportActionBar()
그런 다음 Fragments는 다음과 같은 정확한 ActionBar의 메뉴 채우기에 참여할 수 있습니다.
Fragment.onCreateOptionsMenu(): Fragment 호스트의 표준 옵션 메뉴 내용을 초기화합니다.
특정 조각 하나에 대한 독립 실행형 도구 모음 및 메뉴를 원하는 경우 다음을 수행할 수 있습니다.
menu_custom_custom.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_save"
android:title="SAVE" />
</menu>
custom_interval.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
...
사용자 정의 조각.kt
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(layout.custom_fragment, container, false)
val toolbar = view.findViewById<Toolbar>(R.id.toolbar)
toolbar.inflateMenu(R.menu.menu_custom_fragment)
toolbar.setOnMenuItemClickListener {
onOptionsItemSelected(it)
}
return view
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.menu_save -> {
// TODO: User clicked the save button
true
}
else -> super.onOptionsItemSelected(item)
}
}
네, 그렇게 쉬워요.오버라이드할 필요도 없습니다.onCreate()
또는onCreateOptionsMenu()
.
PS: 이 기능은 다음과 같은 경우에만 작동합니다.android.support.v4.app.Fragment
그리고.android.support.v7.widget.Toolbar
(또한 반드시 사용해야 합니다.AppCompatActivity
리고그.AppCompat
의 의마에 styles.xml
).
menu.xml
모든 메뉴 항목을 추가해야 합니다.그런 다음 초기 로드에서 표시하지 않을 항목을 숨길 수 있습니다.
menu.xml
<item
android:id="@+id/action_newItem"
android:icon="@drawable/action_newItem"
android:showAsAction="never"
android:visible="false"
android:title="@string/action_newItem"/>
더하다setHasOptionsMenu(true)
클래스의 에서 .onCreate() fragment를 호출합니다.
FragmentClass.java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
는 없습니다.onCreateOptionsMenu
당신의 프래그먼트 수업에서 다시.추가/제거)할 수 있습니다.onPrepareOptionsMenu
fragment.fragment에서 할 수 .
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.action_newItem).setVisible(true);
super.onPrepareOptionsMenu(menu);
}
저의 경우, 단계는 다음과 같습니다.
1단계
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Here notify the fragment that it should participate in options menu handling.
setHasOptionsMenu(true);
}
2단계
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// First clear current all the menu items
menu.clear();
// Add the new menu items
inflater.inflate(R.menu.post_stuff, menu);
super.onCreateOptionsMenu(menu, inflater);
}
3단계
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.post_stuff:
Log.d(TAG, "Will post the photo to server");
return true;
case R.id.cancel_post:
Log.d(TAG, "Will cancel post the photo");
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
메뉴를 부풀리기 전에 menu.clear()를 사용해야 합니다.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
그리고.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
그 이후로 이것을 하는 새로운 방법이 있습니다.androidx.activity:activity:1.4.0
MenuProvider API를 사용해야 합니다.
다음과 같이 사용됩니다.
부르는 에.super.setHasOptionMenu
»onCreateOptionsMenu
당신은 전화하기로 되어 있습니다.addMenuProvider
onViewCreated
.
예:
class ExampleFragment : Fragment(R.layout.fragment_example) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// The usage of an interface lets you inject your own implementation
val menuHost: MenuHost = requireActivity()
// Add menu items without using the Fragment Menu APIs
// Note how we can tie the MenuProvider to the viewLifecycleOwner
// and an optional Lifecycle.State (here, RESUMED) to indicate when
// the menu should be visible
menuHost.addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
// Add menu items here
menuInflater.inflate(R.menu.example_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
// Handle the menu selection
return true
}
}, viewLifecycleOwner)
}
출처: 활동 변경 로그
메뉴 사용자 정의를 추가하려는 경우
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_custom, menu);
}
저도 같은 문제를 겪었습니다. 제 조각들은 ViewPager의 페이지였습니다.이 문제가 발생한 이유는 FragmentPagerAdapter를 인스턴스화할 때 작업 지원 fragment 매니저 대신 하위 fragment 매니저를 사용했기 때문입니다.
메뉴 파일:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/play"
android:titleCondensed="Speak"
android:showAsAction="always"
android:title="Speak"
android:icon="@drawable/ic_play">
</item>
<item
android:id="@+id/pause"
android:titleCondensed="Stop"
android:title="Stop"
android:showAsAction="always"
android:icon="@drawable/ic_pause">
</item>
</menu>
활동 코드:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.speak_menu_history, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.play:
Toast.makeText(getApplicationContext(), "speaking....", Toast.LENGTH_LONG).show();
return false;
case R.id.pause:
Toast.makeText(getApplicationContext(), "stopping....", Toast.LENGTH_LONG).show();
return false;
default:
break;
}
return false;
}
조각 코드:
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.play:
text = page.getText().toString();
speakOut(text);
// Do Activity menu item stuff here
return true;
case R.id.pause:
speakOf();
// Not implemented here
return true;
default:
break;
}
return false;
}
코드는 정상입니다.방법에서 슈퍼만 누락되었습니다.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO add your menu :
inflater.inflate(R.menu.my_menu, menu);
//TODO call super
super.onCreateOptionsMenu(menu, inflater);
}
저는 여기에 있는 어떤 대답도 저에게 효과가 없었기 때문에 미칠 지경이었습니다.
호출한 메뉴를 표시하기 위해: setSupportActionBar(toolbar)
알았어!
참고: 다음과 같은 경우toolbar
보기가 동일한 활동 레이아웃에 있지 않습니다. 활동 클래스에서 위의 통화를 직접 사용할 수 없습니다. 이 경우 조각 클래스에서 해당 활동을 가져온 다음 전화를 겁니다.setSupportActionBar(toolbar)
기억: 활동 클래스는 AppCompatActivity를 확장해야 합니다.
이 답변이 도움이 되길 바랍니다.
트setHasMenuOptions(true)
프로그램에 가 프테마있경작는동우합다니가응용에램로그▁with▁applic▁a▁theme▁if▁works다ation▁has니동합이 있는 경우 작동합니다.Actionbar
를 들면Theme.MaterialComponents.DayNight.DarkActionBar
에는 자체 모음이 , 않으면 또활동자도모구있 음 그렇지 않으면onCreateOptionsMenu
fragment에서 호출되지 않습니다.
독립 실행형 도구 모음을 사용하려면 활동을 가져와 지원 작업 모음으로 도구 모음을 설정해야 합니다.
(requireActivity() as? MainActivity)?.setSupportActionBar(toolbar)
그러면 CreateOptionsMenu의 fragment를 호출할 수 있습니다.
다른 방법은 다음을 사용하여 도구 모음의 메뉴를 부풀릴 수 있습니다.toolbar.inflateMenu(R.menu.YOUR_MENU)
청취자는 " "입니다.
toolbar.setOnMenuItemClickListener {
// do something
true
}
이제 2022년에 구글은 setHasOptionsMenu를 더 이상 사용하지 않으며 당신은 사용해야 합니다.MenuProvider
대신.제 경험상, 저는NoSuchMethodException
11,했을 때 안로이드 11, 12서내사 을했때용가에드.setHasOptionsMenu
방법.
메뉴 공급자를 사용하여 활동에 메뉴를 제공할 때 이 방법은 더 이상 필요하지 않습니다. 이 방법은 메뉴 작성 및 항목 선택을 일관되고 선택적으로 라이프사이클을 인식하는 모듈식 방법을 제공하는 권장 방법으로 CreateOptionsMenu를 대체합니다.
다음은 활동/분절 atm에 메뉴를 추가하는 방법은 다음과 같습니다.
/**
* Using the addMenuProvider() API directly in your Activity
**/
class ExampleActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Add menu items without overriding methods in the Activity
addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
// Add menu items here
menuInflater.inflate(R.menu.example_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
// Handle the menu selection
return true
}
})
}
}
/**
* Using the addMenuProvider() API in a Fragment
**/
class ExampleFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// The usage of an interface lets you inject your own implementation
val menuHost: MenuHost = requireActivity()
// Add menu items without using the Fragment Menu APIs
// Note how we can tie the MenuProvider to the viewLifecycleOwner
// and an optional Lifecycle.State (here, RESUMED) to indicate when
// the menu should be visible
menuHost.addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
// Add menu items here
menuInflater.inflate(R.menu.example_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
// Handle the menu selection
return true
}
}, viewLifecycleOwner, Lifecycle.State.RESUMED)
}
여기 참조 링크가 있습니다.
아, 나처럼 게으른 사람은 이것도 추가해야 합니다.
dependencies {
val activity_version = "1.5.1"
// Java language implementation
implementation("androidx.activity:activity:$activity_version")
// Kotlin
implementation("androidx.activity:activity-ktx:$activity_version")
}
프래그먼트 뷰를 생성한 후 옵션 메뉴를 설정하는 것이 저에게는 잘 작동했습니다.
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}
제 문제는 조금 달랐습니다.저는 모든 것을 잘 했습니다.하지만 저는 그 단편을 호스팅하는 활동에 대해 잘못된 클래스를 상속받고 있었습니다.
분명히 말씀드리자면, 만약 당신이 다른 사람보다 우선한다면,onCreateOptionsMenu(Menu menu, MenuInflater inflater)
가 fragment를 상속받는지 합니다.android.support.v7.app.ActionBarActivity
(API 레벨 11 이하를 지원하고자 하는 경우).
나는 상속을 받고 있었습니다.android.support.v4.app.FragmentActivity
11 을 지원합니다.
제가 여기에 덧붙이고 싶은 한 가지와 그것이 저에게 효과가 없었던 이유가 있습니다.
이것은 냅스터의 대답과 비슷합니다.
이 확장되는지 합니다.
AppCompatActivity
,것은 아니다.FragmentActivity
!public class MainActivity extends AppCompatActivity { }
단편 활동에 대한 Google 참조 문서에서 다음을 참조하십시오.
참고: 작업 표시줄을 포함하는 작업을 구현하려면 API 레벨 7 이상에서 Fragment API를 사용할 수 있도록 이 작업의 하위 클래스인 ActionBarActivity 클래스를 사용해야 합니다.
냅스터의 답변을 업데이트하려면 --
ActionBarActivity
더 이상 사용되지 , 사재용않음지, 용사되를 사용하세요.AppCompatActivity
대신.을 할 때
AppCompatActivity
" 테마를 "활동 테마"로 설정해야 .Theme.AppCompat
또는 유사한 테마"(Google Doc).
참고:android.support.v7.app.AppCompatActivity
는 의하클입다니래의 입니다.android.support.v4.app.FragmentActivity
클래스(AppCompativity ref 문서 참조).
메뉴 폴더에서 .menu xml 파일을 만들고 이 xml을 추가합니다.
<item
android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/action_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always|collapseActionView" />
이 방법을 무시한 프래그먼트 클래스에서
implement SearchView.OnQueryTextListener in your fragment class
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true);
}
이제 fragment 클래스에서 메뉴 xml 파일을 설정합니다.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_main, menu);
final MenuItem item = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView)
MenuItemCompat.getActionView(item);
MenuItemCompat.setOnActionExpandListener(item,
new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Do something when collapsed
return true; // Return true to collapse action view
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Do something when expanded
return true; // Return true to expand action view
}
});
}
위의 모든 것이 작동하지 않으면 디버깅을 수행하고 CreateOptionsMenu(디버깅 또는 로그 쓰기...)에서 함수가 호출되었는지 확인해야 합니다.
실행되지 않으면 Android 테마가 수행 표시줄을 지원하지 않을 수 있습니다.AndroidManifest.xml을 열고 테마 지원 작업 표시줄로 값을 설정합니다.
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat">
onCreate 메서드에서 setHasOptionMenu()를 추가합니다.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
그런 다음 onCreateOptions 메뉴를 재정의합니다.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.add("Menu item")
.setIcon(android.R.drawable.ic_delete)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
이것은 fragment가 로드될 때와 파괴될 때 각각 모든 메뉴 옵션을 숨기기 위해 제가 한 일입니다.그것은 위험을 지적하는 것에서 벗어납니다.null
위해서R.id.your_menu_item
그 파편을 다른 곳에서 재사용할 수 있게 해주었습니다.
lateinit var optionsMenu: Menu
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
menu.iterator().forEach {
it.isVisible = false
}
optionsMenu = menu
super.onCreateOptionsMenu(menu, inflater)
}
override fun onDestroyView() {
optionsMenu.iterator().forEach {
it.isVisible = true
}
super.onDestroyView()
}
위의 옵션 중 아무 것도 사용할 수 없는 경우 다음과 같이 단편에서 시도해 보십시오.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
....
toolBar = rootView.findViewById(R.id.import_contacts_toolbar)
toolBar?.title = "Your title"
toolBar?.subtitle = "yor subtitile"
contactsActivity().setSupportActionBar(toolBar)
toolBar?.inflateMenu(R.menu.import_contacts_menu)
...
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.1 -> {
return true
}
R.id.2 -> {
return true
}
}
return false
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
menu.clear()
inflater.inflate(R.menu.import_contacts_menu, menu)
super.onCreateOptionsMenu(menu, inflater)
val search = menu.findItem(R.id.action_search)
val searchView = search.actionView as SearchView
searchView.requestFocus()
val txtSearch = searchView.findViewById<View>(androidx.appcompat.R.id.search_src_text) as EditText
txtSearch.hint = "Search..."
txtSearch.setHintTextColor(Color.WHITE);
txtSearch.setTextColor(Color.WHITE)
try {
val f: Field = TextView::class.java.getDeclaredField("mCursorDrawableRes")
f.setAccessible(true)
f.set(txtSearch, R.drawable.search_edit_text_cursor)
} catch (ignored: Exception) {
Log.d(TAG, "failed to expose cursor drawable $ignored")
}
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
override fun onQueryTextChange(newText: String): Boolean {
return true
}
})
searchView.setOnCloseListener {
}
}
제 경우에는 항상 표시되도록 설정된 검색 메뉴 항목이 있었습니다.다음은 xml입니다.
<?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/action_search"
app:showAsAction="always"
app:actionViewClass="androidx.appcompat.widget.SearchView"
android:title="Search"/>
<item android:id="@+id/1"
android:title="1">
</item>
<item android:id="@+id/2"
android:title="2">
</item>
</menu>
다음은 조각의 사용자 지정 도구 모음으로 수행하는 방법입니다.mbo에 의한 방법과 유사하지만 사용되지 않는 방법이 대체되었습니다.
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
this.rootView = inflater.inflate(R.layout.fragment_study_list, container, false) as DrawerLayout
// Set the menu
val toolbar = this.rootView.findViewById<Toolbar>(R.id.studylist_toolbar)
toolbar.addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
// Add menu items here
menuInflater.inflate(R.menu.studylist_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
// Handle the menu selection
Log.d("CONJUU","Menu clicked")
return true
}
}, viewLifecycleOwner, Lifecycle.State.RESUMED)
}
언급URL : https://stackoverflow.com/questions/8308695/how-to-add-options-menu-to-fragment-in-android
'programing' 카테고리의 다른 글
시스템이 둘 다 있는 이유는 무엇입니까?Net.Http 및 시스템.Web.Http 네임스페이스? (0) | 2023.07.12 |
---|---|
Mongoose autoReconnect 옵션 (0) | 2023.07.12 |
join을 사용하여 "not in ()" SQL 쿼리를 쓰는 방법 (0) | 2023.07.12 |
Android가 텍스트 편집에 자리 표시자 텍스트 추가 (0) | 2023.07.12 |
루프(또는 이해)에서 함수(또는 람다) 만들기 (0) | 2023.07.12 |