2016-10-05 106 views
1
setDisplayHomeAsUpEnabled

我找遍了所有的一天通过所有类似的问题和答案,在这里计算器,却发现不知道为什么它不工作onOptionsItemSelected不叫片段与AppCompatActivity

这里从我的代码的一些摘录

片段:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    rootView = inflater.inflate(R.layout.fragment_gallery, container, false); 
    setHasOptionsMenu(true); 
    actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar(); 
    actionBar.setTitle("Portfolio"); 
    updateGallery(); 
    return rootView; 
} 


    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 
} 

    public void updateGallery() { 
    if (activeAlbum>0) { 
     actionBar.setDisplayHomeAsUpEnabled(true); 
    } else { 
     actionBar.setDisplayHomeAsUpEnabled(false); 
    } 
...... 
} 

    @Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     default: 
      break; 
    } 
    return false; 
} 

MainActivity:

public class MainActivity extends AppCompatActivity {...} 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

.... 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.addDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 


...... 
} 


    public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

onOptionsItemSelected既未在MainActivity中也未在片段中被触发

回答

0

片段必须声明它们可以提供选项。看看这里:

https://developer.android.com/reference/android/app/Fragment.html#setHasOptionsMenu(boolean)

我想你只需要调用setHasOptionsMenu(真)在onCreateView()的片段中。

+0

感谢你的链接,我会看看 (我已经打电话setHasOptionsMenu(真)) 我担心别的东西可以用onOptionsItemSelected 被干扰(也许我应该尝试添加一个新的“空“片段进行测试) – jthomas

相关问题