D'Action pour le changement de la barre de titre pour chaque onglet glisser sur android
J'ai mis en place une Action bar avec glisser les onglets à l'aide de ActionBarSherlock et de Fragments.
Je veux avoir une Action différente de la barre de titre pour chaque onglet. Et ce serait génial si je pouvais définir l'image à la place du titre, de sorte que chaque onglet aurait différente de l'Action de la barre de titre de l'image.
J'aimerais avoir des suggestions et des liens 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();
}
}
Avez-vous essayé mActionBar.setTitle("votre onglet titre") à l'intérieur de onPageSelected?
Merci ça fonctionne, mais que je démarre l'application, elle définit ancien titre premier, sur la glisser à n'importe quel onglet, il change de "votre onglet titre" et elle reste la même. Je l'ai mis à l'intérieur de onPageSelected dans TabAdapter.java. Dois-je le mettre à l'intérieur du fragment de soi?
Le mien était seulement un exemple . Où est la chaîne de caractères que vous voulez définir comme actionbar titre? Pouvez-vous accéder à l'intérieur de onPageSelected ?
je n'ai pas créé une chaîne pourtant, en fait, je voudrais utiliser une image en place, je pense qu'il devrait être possible d'accéder à l'intérieur de onPageSelected.
je voudrais avoir une action différente de la barre de titre de l'image pour chaque onglet
Merci ça fonctionne, mais que je démarre l'application, elle définit ancien titre premier, sur la glisser à n'importe quel onglet, il change de "votre onglet titre" et elle reste la même. Je l'ai mis à l'intérieur de onPageSelected dans TabAdapter.java. Dois-je le mettre à l'intérieur du fragment de soi?
Le mien était seulement un exemple . Où est la chaîne de caractères que vous voulez définir comme actionbar titre? Pouvez-vous accéder à l'intérieur de onPageSelected ?
je n'ai pas créé une chaîne pourtant, en fait, je voudrais utiliser une image en place, je pense qu'il devrait être possible d'accéder à l'intérieur de onPageSelected.
je voudrais avoir une action différente de la barre de titre de l'image pour chaque onglet
OriginalL'auteur user1810991 | 2013-05-24
Vous devez vous connecter pour publier un commentaire.
wow c'était une sorte de descendance
solution sympa..merci
cela fonctionne, mais j'ai un petit problème, 1er onglet position0 ne prend pas en charge une fois que j'ouvre l'application. Lorsqu'il est ouvert le 2ème onglet et de revenir au 1er onglet, puis il affiche l'image position0. pourquoi est-ce?
Je ne sais pas, je suis désolé
OriginalL'auteur Blackbelt
Vous devez définir addOnPageChangeListener à votre vue pager comme ce
Définir cette listeneer à votre vue pager où vous définissez votre carte
J'ai examiné votre réponse. Vous devez soutenir votre réponse.
Que voulez-vous dire ?
Lire ceci
OriginalL'auteur Alfred Wright
OriginalL'auteur Praveena