วิธีเพิ่มเมนูตัวเลือกในแฟรกเมนต์ใน Android


399

ฉันกำลังพยายามเพิ่มรายการในเมนูตัวเลือกจากกลุ่มของชิ้นส่วน

ฉันได้สร้าง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);
    }
}

Kotlin:

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);
    }
}

ด้วยเหตุผลบางอย่างonCreateOptionsMenuดูเหมือนจะไม่ทำงาน


อาจเป็นคำถามงี่เง่า ... คุณกดปุ่มเมนูใช่มั้ย
Ovidiu Latcu

2
.. lol ... ใช่ฉันกดปุ่มเมนูแล้วฉันได้ลองด้วยและไม่ได้: fav.setShowAsAction (MenuItem.SHOW_AS_ACTION_ALWAYS);
misterbassman

สวัสดีบางทีกระทู้นี้จะช่วยคุณหรือตรวจสอบตัวอย่างการทำงานของapi
kameny

คำตอบ:


604

เรียกวิธีการ super:

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);
    }

Kotlin:

    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)เพื่อแจ้งให้ทราบถึงส่วนที่ควรมีส่วนร่วมในการจัดการเมนูตัวเลือก


2
ขอบคุณสำหรับความช่วยเหลือฉันได้เพิ่มวิธีการพิเศษและฉันรู้ว่าฉันได้ลบ @Override ดังนั้นจึงเพิ่มสิ่งนี้กลับเข้ามาอีกคราสเกิดข้อผิดพลาดดังนั้นฉันจึงแทนที่ MenuInflater เพื่อนำเข้า android.view.MenuInflater แทนการนำเข้า android.support.v4.view.MenuInflater; และตอนนี้ทุกอย่างทำงานได้ดี
misterbassman

183
ไม่เรียก setHasOptionsMenu (จริง) ในส่วนของ onCreate ทำให้ฉันได้รับสองครั้งในขณะนี้
joshkendrick

7
ฉันกำลังถ่ายโอนกิจกรรมของฉันเป็นชิ้นส่วนและพบปัญหานี้ ลายเซ็นวิธีการเปลี่ยนจากบูลีนสาธารณะเป็นโมฆะสาธารณะและข้อโต้แย้งก็เปลี่ยนไป อย่าลืมจดบันทึกสิ่งนี้!
786

14
โปรดทราบว่า Fragment.onCreateOptionsMenu (เมนู MenuInflater) เป็นวิธีการที่ว่างเปล่าดังนั้นการเรียก super ไม่จำเป็นเลย ความผิดพลาดเพียงอย่างเดียวที่นี่คือลายเซ็นวิธีการที่ไม่ถูกต้องและอาจเป็นไปได้ว่า setHasOptionsMenu () ใน onCreate ()
cmende

6
แทนที่ super.onCreateOptionsMenu ด้วย inflater.inflate (เมนูเมนูเมนูอาร์เมเนีย)
Code_Worm

197

ฉันมีปัญหาเดียวกัน แต่ฉันคิดว่าเป็นการดีกว่าที่จะสรุปและแนะนำขั้นตอนสุดท้ายเพื่อให้มันทำงาน:

  1. เพิ่ม setHasOptionsMenu วิธี (จริง) ในส่วนของคุณonCreate(Bundle savedInstanceState)วิธีการ

  2. แทนที่onCreateOptionsMenu(Menu menu, MenuInflater inflater)(หากคุณต้องการทำสิ่งที่แตกต่างในเมนู Fragment ของคุณ) และonOptionsItemSelected(MenuItem item)วิธีการใน Fragment ของคุณ

  3. ภายในonOptionsItemSelected(MenuItem item)เมธอดของกิจกรรมของคุณตรวจสอบให้แน่ใจว่าคุณได้คืนค่าเท็จเมื่อแอคชั่นรายการเมนูถูกนำไปใช้ใน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;
}

2
เพิ่งหายไปsetHasOptionsMenu(true);ขอบคุณ
ชาด Bingham

1
ใน viewPager บนอุปกรณ์บางตัวเมนูจะแสดงเฉพาะในครั้งที่สองที่คุณไปที่แฟรกเมนต์
Roel

3
@Marco HC โค้ดของคุณใช้งานได้ดี แต่ถ้าฉันต้องการซ่อนเมนูบางอย่างสำหรับกิจกรรมหรือสำหรับแฟรกเมนต์ คุณได้พูดถึงสถานที่ที่จะใช้เมนูตัวเลือก (ในกิจกรรมและส่วน) แต่ถ้าฉันต้องการซ่อนเมนู
Shreyash Mahajan

@iDroidExplorer เพียงอ้างอิงถึง MenuItem นั้นและตั้งค่าการเปิดเผยเป็นหายไปหรือมองไม่เห็น นั่นคือคำถามของคุณ?
Marco HC

@iDroidExplorer ฉันลองใช้รหัสของเขาและฉันไม่รู้ว่ามันจะซ่อนเมนูโดยอัตโนมัติอย่างไรเมื่อฉันเปลี่ยนเป็นชิ้นส่วนอื่น ๆ
Noor Ali Butt

156

หากคุณพบonCreateOptionsMenu(Menu menu, MenuInflater inflater)ว่าไม่ได้มีการเรียกใช้วิธีการตรวจสอบให้แน่ใจว่าคุณได้เรียกวิธีต่อไปนี้จากวิธีส่วนของonCreate(Bundle savedInstanceState):

setHasOptionsMenu(true)

มันทำให้ฉันเกิดข้อผิดพลาดเช่น NullPointerException
Pratik Butani

2
จุดดี. ฉันเรียกใช้เมธอด setHasOptionMenu จากเมธอด newInstance แบบสแตติก เนื่องจากฉันเพิ่งแนบแฟรกเมนต์ของฉันเมื่อถูกบันทึกไว้InstanceStateเป็นโมฆะเมื่อการกำหนดค่าหน้าจอเปลี่ยนเมนูจะไม่ถูกสร้างขึ้น เมธอด onCreate ของแฟรกเมนต์เป็นตำแหน่งที่ถูกต้องที่ตั้ง setHasOptionMenu เป็น true
argenkiwi

1
ฉันใช้Toolbarและต้องโทรsetHasOptionsMenu(true)เข้าonCreateView()แทนonCreate()เพื่อให้เสร็จ
CLOUGH

60

หากคุณต้องการ a menuเพื่อรีเฟรช a 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>

31

TL; DR

ใช้android.support.v7.widget.Toolbarและเพียงทำ:

toolbar.inflateMenu(R.menu.my_menu)
toolbar.setOnMenuItemClickListener {
    onOptionsItemSelected(it)
}

แถบเครื่องมือแบบสแตนด์อโลน

ส่วนใหญ่แก้ปัญหาชอบsetHasOptionsMenu(true)เป็นเพียงการทำงานเมื่อกิจกรรมของผู้ปกครองมีแถบเครื่องมือในรูปแบบของsetSupportActionBar()และประกาศผ่านทาง จากนั้นแฟรกเมนต์สามารถเข้าร่วมในเมนูประชากรของActionBarที่แน่นอนนี้:

Fragment.onCreateOptionsMenu (): เริ่มต้นเนื้อหาของเมนูตัวเลือกมาตรฐานของ Fragment host

หากคุณต้องการแถบเครื่องมือแบบสแตนด์อโลนและเมนูสำหรับ Fragment หนึ่งอันคุณสามารถทำสิ่งต่อไปนี้:

menu_custom_fragment.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_fragment.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" />

    ...

CustomFragment.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)


1
ช่วยฉันได้มากจริงๆ
brahmy adigopula

23

ในที่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ในคลาส Fragment อีกครั้ง รายการเมนูสามารถเปลี่ยนแปลงได้ (เพิ่ม / ลบ) โดยonPrepareOptionsMenuวิธีการเอาชนะที่มีอยู่ในส่วน

@Override
public void onPrepareOptionsMenu(Menu menu) {
    menu.findItem(R.id.action_newItem).setVisible(true);
    super.onPrepareOptionsMenu(menu);

}

16

คุณต้องใช้ 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);
    }

1
สิ่งนี้ถูกต้องเมื่อคุณต้องการเมนูที่แตกต่างในแฟรกเมนต์ที่แตกต่างกันและคุณกำลังเพิ่มแฟรกเมนต์แทนการแทนที่
Akshay Mahajan

ขอบคุณ! menu.clear () ช่วยฉันลบตัวเลือกเมนูของกิจกรรม
kimcy929

13

ในกรณีของฉันนี่คือขั้นตอน

ขั้นตอนที่ 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()เมนูก่อนหน้าที่ถูกล้าง ทำงานให้ฉัน :)
Anbuselvan Rocky

8

หากคุณต้องการเพิ่มเมนูของคุณเอง

@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);
}

เกิดอะไรขึ้นถ้ามีมุมมองแท็บและคุณต้องการขยายเมนูที่แตกต่างกันสำหรับแต่ละส่วน?
Jainam Jhaveri

7

ฉันมีปัญหาเดียวกันเศษของฉันคือหน้าของ ViewPager เหตุผลที่มันเกิดขึ้นก็คือฉันใช้ตัวจัดการส่วนย่อยของเด็กแทนที่จะเป็นตัวจัดการส่วนสนับสนุนกิจกรรมเมื่อสร้างอินสแตนซ์ FragmentPagerAdapter


3

ไฟล์เมนู:

<?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;
}

3

รหัสของคุณใช้ได้ เฉพาะซุปเปอร์ขาดหายไปในวิธีการ:

@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);
}

2

ฉันเริ่มบ้าเพราะไม่มีคำตอบที่นี่สำหรับฉัน

เพื่อแสดงเมนูที่ฉันต้องโทร: setSupportActionBar(toolbar)

ทำ!

หมายเหตุ: หากคุณมุมมองที่ไม่ได้อยู่ในรูปแบบกิจกรรมเดียวกับที่คุณไม่สามารถใช้โทรข้างต้นโดยตรงจากชั้นเรียนกิจกรรมของคุณในกรณีนี้คุณจะต้องได้รับกิจกรรมที่จากชั้นส่วนของคุณแล้วโทรtoolbar setSupportActionBar(toolbar)ความทรงจำ: คลาสกิจกรรมของคุณควรขยาย AppCompatActivity

หวังว่าคำตอบนี้จะช่วยคุณได้


1

การตั้งค่าเมนูตัวเลือกหลังจากสร้างมุมมองแฟรกเมนต์ทำงานได้ดีสำหรับฉัน

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setHasOptionsMenu(true);        
}

1

ปัญหาของฉันแตกต่างกันเล็กน้อย ฉันทำทุกอย่างถูกต้อง แต่ฉันกำลังสืบทอดคลาสที่ไม่ถูกต้องสำหรับกิจกรรมที่โฮสต์แฟรกเมนต์

เพื่อให้ชัดเจนถ้าคุณกำลังเอาชนะonCreateOptionsMenu(Menu menu, MenuInflater inflater)ในส่วนย่อยให้แน่ใจว่าคลาสกิจกรรมของคุณซึ่งโฮสต์ส่วนย่อยนี้สืบทอดandroid.support.v7.app.ActionBarActivity(ในกรณีที่คุณต้องการสนับสนุนด้านล่าง API ระดับ 11)

ฉันได้รับการandroid.support.v4.app.FragmentActivityสนับสนุนระดับ API ต่ำกว่า 11


1

สิ่งหนึ่งที่ฉันจะเพิ่มไปนี้และเหตุผลที่มันไม่ทำงานสำหรับฉัน

มันคล้ายกับคำตอบของ Napster

  1. ตรวจสอบให้แน่ใจว่ากิจกรรมการโฮสต์ของส่วนขยายของAppCompatActivityคุณไม่ใช่FragmentActivity!

    public class MainActivity extends AppCompatActivity {
    
    }

    จาก Google อ้างอิงเอกสารสำหรับ FragmentActivity:

    หมายเหตุ: หากคุณต้องการใช้งานกิจกรรมที่มีแถบการกระทำคุณควรใช้คลาส ActionBarActivity ซึ่งเป็นคลาสย่อยของกิจกรรมนี้ดังนั้นอนุญาตให้คุณใช้ Fragment API บน API ระดับ 7 และสูงกว่า

  2. หากต้องการอัปเดตคำตอบของ Napster - ActionBarActivityตอนนี้เลิกใช้แล้วให้ใช้AppCompatActivityแทน

  3. เมื่อใช้AppCompatActivityงานตรวจสอบให้แน่ใจว่าคุณได้ตั้ง "ชุดรูปแบบกิจกรรมเป็นTheme.AppCompatหรือชุดรูปแบบที่คล้ายกัน" (Google Doc)

หมายเหตุ: android.support.v7.app.AppCompatActivityเป็นคลาสย่อยของandroid.support.v4.app.FragmentActivityคลาส (ดูที่AppCompatActivity ref doc)


1

ในโฟลเดอร์เมนูของคุณให้สร้างไฟล์. manu 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);

}

ตอนนี้เพียงแค่ติดตั้งไฟล์ 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
                }
            });

}

0

หากสิ่งทั้งหมดข้างต้นใช้งานไม่ได้คุณจะต้องตรวจแก้จุดบกพร่องและทำให้แน่ใจว่ามีการเรียกใช้ฟังก์ชัน onCreateOptionsMenu (โดยการดีบักหรือเขียนบันทึก ... )

หากไม่ได้ทำงานอาจเป็นไปได้ว่าธีม Android ของคุณไม่สนับสนุนแถบการกระทำ เปิด AndroidManifest.xml และตั้งค่าandroid:themeด้วยแถบแอ็คชันการสนับสนุนธีม :

 <activity
     android:name=".MainActivity"
     android:label="@string/app_name"
     android:theme="@style/Theme.AppCompat">

0

ในเมธอด onCreateของคุณให้เพิ่มsetHasOptionMenu ()

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

จากนั้นแทนที่onCreateOptionsMenuของคุณ

@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);
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.