Android - 如何在片段类中访问操作栏的菜单项

Dao*_*anh 35 android

我应该如何访问片段中的操作栏菜单项?我试过这个,但什么都没发生

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub

    switch (item.getItemId()) {
    case R.id.menu_refresh:
        Toast.makeText(getActivity().getApplicationContext(), "clicked", Toast.LENGTH_SHORT).show();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // TODO Auto-generated method stub
    super.onCreateOptionsMenu(menu, inflater);
}
Run Code Online (Sandbox Code Playgroud)

TeR*_*RRo 58

请遵循以下步骤:

  • 在Fragment中添加setHasOptionsMenu(true)方法.

  • 重写onCreateOptionsMenu(菜单菜单,MenuInflater打气筒)和onOptionsItemSelected(菜单项项目)在片段的方法.

  • 里面的onOptionsItemSelected(菜单项项)活动的方法,请确保您返回false,如果菜单项行动将在onOptionsItemSelected(菜单项项)片段的方法来实现.

例:

活动

@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;
}
Run Code Online (Sandbox Code Playgroud)

分段

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;
}
Run Code Online (Sandbox Code Playgroud)

  • http://stackoverflow.com/a/18319050/3496570的副本.更好地给予答复者 (6认同)

Sim*_*mon 5

在你的片段onCreate方法中添加setHasOptionsMenu(true);.

如果您的片段在ViewPager中,则具有ViewPager的片段也需要上面的行.


Joã*_*cos 5

您无法直接访问片段中的ActionBar菜单项.你可以做的是把setHasOptionsMenu(true); 在片段类中的onCreateView函数中,这将调用相应活动中的onCreateOptionsMenu(菜单菜单)函数.

在那里,您可以访问操作栏中的所有菜单项.您可以使用:

MenuItem item = menu.getItem(index);
Run Code Online (Sandbox Code Playgroud)

你有一个使用它的例子:

在片段onCreateView类中:

setHasOptionsMenu(true);
Run Code Online (Sandbox Code Playgroud)

在相应的活动类中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    MenuItem item = menu.getItem(0);
    if(condition)
        item.setVisible(true);
    else 
        item.setVisible(false);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    // Handle action bar actions click
    switch (item.getItemId()) {
       case R.id.action_logout:
           makeLogout();
           return  true;
       default :
           return super.onOptionsItemSelected(item);
    }

}
Run Code Online (Sandbox Code Playgroud)