2015-03-22 4 views
0

Я пытаюсь получить кнопку действия, чтобы появиться в моей панели действий, однако я могу только получить переполнение действия, чтобы отображаться вместо рисованного. Here - это то, что я вижу.Кнопка действия, не показывающая Drawable в действии Бар

Вот мой источник menu_friends.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:binder="http://schemas.android.com/apk/res-auto" > 
    <!-- action_friends should appear as action button --> 
    <item android:id="@+id/action_friends" 
     android:icon="@drawable/ic_account_plus_grey600_24dp" 
     android:title="@string/menu_edit_friends_label" 
     binder:showAsAction="always" /> 
</menu> 

Вот фрагмент, где я раздувания меню:

public class FriendsFragment extends Fragment { 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     setHasOptionsMenu(true); 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_friends, container, false); 
    } 

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

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_friends: 
      navigateToEditFriends(); 
     } 
     return super.onOptionsItemSelected(item); 
    } 
    private void navigateToEditFriends() { 
     Intent myIntent = new Intent(FriendsFragment.this.getActivity(), EditFriendsActivity.class); 
     startActivity(myIntent); 
    } 
} 

Вот мой MainActivity код:

public class MainActivity extends FragmentActivity { 

    private static final String TAG = MainActivity.class.getSimpleName(); 
    private PagerSlidingTabStrip tabs; 
    private ViewPager pager; 
    private MyPagerAdapter adapter; 

    private DrawerLayout mDrawerLayout; 
    private ListView mDrawerList; 
    private ActionBarDrawerToggle mDrawerToggle; 
    private CharSequence mDrawerTitle; 
    private CharSequence mTitle; 
    private String[] mDrawerItems; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mTitle = mDrawerTitle = getTitle(); 
     mDrawerItems = getResources().getStringArray(R.array.drawer_titles); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.left_drawer); 
     // set a custom shadow that overlays the menu_main content when the drawer opens 
     mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
     // Add items to the ListView 
     mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mDrawerItems)); 
     // Set the OnItemClickListener so something happens when a 
     // user clicks on an item. 
     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

     // Enable ActionBar app icon to behave as action to toggle the NavigationDrawer 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setHomeButtonEnabled(true); 

     mDrawerToggle = new ActionBarDrawerToggle(
       this, 
       mDrawerLayout, 
       R.string.drawer_open, 
       R.string.drawer_close 
     ) { 
      public void onDrawerClosed(View view) { 
       getActionBar().setTitle(mTitle); 
       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu 
      } 

      public void onDrawerOpened(View drawerView) { 
       getActionBar().setTitle(mDrawerTitle); 
       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu 
      } 
     }; 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 

/*  // Set the default content area to item 0 
     // when the app opens for the first time 
     if(savedInstanceState == null) { 

     }*/ 


     tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); 
     pager = (ViewPager) findViewById(R.id.pager); 
     adapter = new MyPagerAdapter(getSupportFragmentManager()); 
     pager.setAdapter(adapter); 
     final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources().getDisplayMetrics()); 
     pager.setPageMargin(pageMargin); 
     tabs.setViewPager(pager); 



    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     mDrawerToggle.syncState(); 
    } 
    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 
    private class DrawerItemClickListener implements AdapterView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      navigateTo(position); 
     } 
    } 
    private void navigateTo(int position) { 

     switch(position) { 
      case 0: 
navigateToSettings(); 
       break; 
      case 1: 
userLogout(); 
       break; 
     } 
     mDrawerLayout.closeDrawer(mDrawerList); 
    } 
    @Override 
    public void setTitle(CharSequence title) { 
     mTitle = title; 
     getActionBar().setTitle(mTitle); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if(mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
    } 



    public class MyPagerAdapter extends FragmentPagerAdapter { 


     public MyPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return (position ==0)? "Inbox" : "Friends"; 
     } 

     @Override 
     public int getCount() { 
      return 2; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return (position ==0)? new InboxFragment() : new FriendsFragment(); 
     } 
    } 

    private void userLogout() { 
     ParseFacebookUtils.getSession().closeAndClearTokenInformation(); 
     ParseUser.logOut(); 
     Intent intent = new Intent(this, LoginActivity.class); 
     startActivity(intent); 
    } 
    private void navigateToSettings() { 
     Intent intent = new Intent(this, Settings.class); 
     startActivity(intent); 
    } 
} 

Любая помощь по этому вопросу будет принята с благодарностью! -R

ответ

1

Поместите setHasOptionsMenu() в свои фрагменты onCreate, а не в методе onCreateView(). Это должно делать свое дело.

+0

Я уже пробовал это, и он не работал. –

+0

Удалите это menu.clear(). Я верю, что это не обязательно. Ваш код выглядит очень симпатичным для моего, поэтому это должно действительно работать. Для более близкого взгляда в вашем коде я должен использовать свой компьютер, которого на самом деле здесь нет. – HeW

+0

Я тоже пробовал, но это не сработало :( –

Смежные вопросы