2016-01-13 32 views
-2

我如何製作一個類似於whatsapp的操作欄,在片段更改時更改按鈕。ActionBar like whatsapp

例子:

當我在「CONVER ......」選項卡我已經氣球圖標,當我刷到「Chamadas」標籤我一個圖標更改撥號圖標

enter image description here 我怎樣才能使這個,編程方式在android(java)?

我的抽屜裏活動

@EActivity(R.layout.drawer) 
@OptionsMenu(R.menu.main) 
public class DrawerActivity extends Activity { 

    private Fragment fragment; 

    @StringArrayRes(R.array.wigo_items) 
    String[] mWigoItems; 

    @ViewById(R.id.drawer_layout) 
    DrawerLayout mDrawerLayout; 

    @ViewById(R.id.left_drawer) 
    ListView mDrawerList; 

    ActionBarDrawerToggle mDrawerToggle; 

    private CharSequence mDrawerTitle; 
    private CharSequence mTitle = ""; 

    @Bean 
    MoodAdapter adapterKarma; 

    @AfterViews 
    public void afterViews() { 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setDisplayShowHomeEnabled(true); 

     mTitle = mDrawerTitle = getTitle(); 

     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, 
       R.string.navigation_drawer_open, R.string.navigation_drawer_close) { 

      /** 
      * Called when a drawer has settled in a completely closed state. 
      */ 
      public void onDrawerClosed(View view) { 
       super.onDrawerClosed(view); 
       getActionBar().setTitle(mTitle); 
       invalidateOptionsMenu(); // creates call to 
              // onPrepareOptionsMenu() 
      } 

      /** Called when a drawer has settled in a completely open state. */ 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       getActionBar().setTitle(mDrawerTitle); 
       invalidateOptionsMenu(); // creates call to 
              // onPrepareOptionsMenu() 
      } 
     }; 

     mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mWigoItems)); 
     // adapterKarma.moods.addAll(setListKarma()); 
     // mDrawerList.setAdapter(adapterKarma); 
     // mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 
     mDrawerListItemClicked(0); 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     // Sync the toggle state after onRestoreInstanceState has occurred. 
     mDrawerToggle.syncState(); 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     // If the nav drawer is open, hide action items related to the content 
     // view 
     boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); 

     return super.onPrepareOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Pass the event to ActionBarDrawerToggle, if it returns 
     // true, then it has handled the app icon touch event 
     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 
     // if((fragment.getClass() != TweetList_.class && 
     // TweetList_.class.isAssignableFrom(fragment.getClass()))){ 
     // Handle your other action bar items... 
     switch (item.getItemId()) { 
     case R.id.action_search: 
     case R.id.action_bookmark: 
     case R.id.action_calendar: 
     case R.id.action_sobre: 
      Toast.makeText(this, "Not implemented", Toast.LENGTH_LONG).show(); 
     } 
     // } 
     return super.onOptionsItemSelected(item); 
    } 

    @ItemClick(R.id.left_drawer) 
    void mDrawerListItemClicked(int position) { 

     fragment = null; 
     switch (position) { 
     case 0: 
      fragment = new TweetFragment_(); 
      break; 
     case 1: 
      fragment = new ConfigFragment_(); 
      break; 
     case 2: 
      fragment = new AboutFragment_(); 
      break; 
     default: 
      break; 
     } 

     FragmentManager fragmentManager = getFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.container, fragment).commit(); 

     // Highlight the selected item, update the title, and close the drawer 
     mDrawerList.setItemChecked(position, true); 
     //setTitle(mWigoItems[position]); 
     setTitle(""); 
     mDrawerLayout.closeDrawer(mDrawerList); 

    } 


    @Override 
    public void setTitle(CharSequence title) { 
     mTitle = title; 
     getActionBar().setTitle(mTitle); 
    } 

    public ArrayList<Mood> setListKarma() { 

     // Now i have taken static values by loop. 
     // For further inhancement we can take data by webservice/json/xml; 
     ArrayList<Mood> CustomListViewValuesArr = new ArrayList<Mood>(); 
     CustomListViewValuesArr 
       .add(new Mood(1, "Apaixonado", BitmapFactory.decodeResource(getResources(), R.drawable.apaixonado))); 

     return CustomListViewValuesArr; 

    } 
} 

佈局

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
    <!-- navigation drawer --> 

    <ListView android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111"/> 

</android.support.v4.widget.DrawerLayout> 
+1

如果您包含迄今爲止已嘗試過的示例,您將更有可能從人員獲得幫助。 – Vorticity

+0

@您想要的渦度 –

+0

我正在使用AndroidAnnotations Framework –

回答

1

第1步:將您的片段onCreate()調用setHasOptionsMenu(true)

步驟2:在您的碎片上執行onCreateOptionsMenu()onOptionsItemSelected()

步驟#3:將特定於片段的所有操作項移出活動並移入片段。

在片段中定義的操作欄項目只會在操作欄顯示時纔會顯示。因此,當用戶切換標籤時,操作欄的內容將會改變。