Changer le titre de la barre d'action pour chaque glissement de l'onglet sur Android

J'ai mis en place la barre d'action avec les onglets déroulants en utilisant ActionBarSherlock et Fragments.

Je veux avoir un titre de barre Action différent pour chaque onglet. Et ce serait génial de configurer l'image au lieu du titre, de sorte que chaque onglet aurait un titre d'image de barre Action différent.

J'apprécierais toute suggestion et lien vers des tutoriels! Merci:)

Voici mon code: TabActivity.java

package com.tptabs; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockFragmentActivity; import android.support.v4.view.ViewPager; public class TabActivity extends SherlockFragmentActivity { private ViewPager mViewPager; private TabAdapter mTabsAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mViewPager = new ViewPager(this); mViewPager.setId(R.id.pager); setContentView(mViewPager); final ActionBar bar = getSupportActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); mTabsAdapter = new TabAdapter(this, mViewPager); mTabsAdapter.addTab(bar.newTab().setText("").setIcon(getResources().getDrawable(R.drawable.social_group)), JoinFragment.class, null); mTabsAdapter.addTab(bar.newTab().setText("").setIcon(getResources().getDrawable(R.drawable.content_edit)), CreateFragment.class, null); mTabsAdapter.addTab(bar.newTab().setText("").setIcon(getResources().getDrawable(R.drawable.location_web_site)), PlayFragment.class, null); mTabsAdapter.addTab(bar.newTab().setText("").setIcon(getResources().getDrawable(R.drawable.collections_collection)), ResultFragment.class, null); mTabsAdapter.addTab(bar.newTab().setText("").setIcon(getResources().getDrawable(R.drawable.device_access_accounts)), StoreFragment.class, null); } } 

TabAdapter.java

 package com.tptabs; import java.util.ArrayList; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; import android.util.Log; import android.widget.Toast; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.Tab; import com.actionbarsherlock.app.SherlockFragmentActivity; public class TabAdapter extends FragmentPagerAdapter implements ActionBar.TabListener , ViewPager.OnPageChangeListener{ private final Context mContext; private final ActionBar mActionBar; private final ViewPager mViewPager; private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); private final String TAG = "21st Polling:"; static final class TabInfo{ private final Class<?> clss; private final Bundle args; TabInfo(Class<?> _class, Bundle _args){ clss = _class; args = _args; } } public TabAdapter(SherlockFragmentActivity fa, ViewPager pager) { super(fa.getSupportFragmentManager()); mContext = fa; mActionBar = fa.getSupportActionBar(); mViewPager = pager; mViewPager.setAdapter(this); mViewPager.setOnPageChangeListener(this); } public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args){ TabInfo info = new TabInfo(clss, args); tab.setTag(info); tab.setTabListener(this); mTabs.add(info); mActionBar.addTab(tab); notifyDataSetChanged(); } @Override public void onPageScrollStateChanged(int state) { } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { mActionBar.setSelectedNavigationItem(position); } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { mViewPager.setCurrentItem(tab.getPosition()); Log.v(TAG, "clicked"); Object tag = tab.getTag(); for (int i = 0; i<mTabs.size(); i++){ if (mTabs.get(i) == tag){ mViewPager.setCurrentItem(i); } } } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { //Toast.makeText(mContext, "You've deselected a tab", Toast.LENGTH_SHORT).show(); } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } @Override public Fragment getItem(int position) { TabInfo info = mTabs.get(position); return Fragment.instantiate(mContext, info.clss.getName(), info.args); } @Override public int getCount() { return mTabs.size(); } } 

3 Solutions collect form web for “Changer le titre de la barre d'action pour chaque glissement de l'onglet sur Android”

 public class TabAdapter extends FragmentPagerAdapter implements ActionBar.TabListener , ViewPager.OnPageChangeListener{ int resId = {R.drawable.position0, R.drawable.position1, R.drawable.position2, R.drawable.position3, R.drawable.position4}; @Override public void onPageSelected(int position) { mActionBar.setSelectedNavigationItem(position); int resIdLenght = resId.length; if (position < 0 || position >= resIdLenght) return; int drawableId = resId[position]; mActionBar.setIcon(drawableId); } } 

Vous devez définir addOnPageChangeListener dans votre téléavertisseur de vue comme celui-ci

  pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if (position == 1) { setTitle("Page 1"); } else if (position == 2) { setTitle("Page 2"); } else { setTitle("Page 3"); } } 
 @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { // When the given tab is selected, switch to the corresponding page in // the ViewPager. mViewPager.setCurrentItem(tab.getPosition()); getActionBar().setTitle(tab.getText());//to change titile as per the current tab getActionBar().setIcon(tab.getIcon());//to change icon as per the current tab } 
coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.