7

Ho impostato la barra delle azioni con le schede di scorrimento utilizzando ActionBarSherlock e Fragments.Cambia il titolo della barra delle azioni per ogni scorrimento scheda su Android

Desidero avere un titolo della barra delle azioni diverso per ogni scheda. E sarebbe bello se potessi impostare un'immagine al posto del titolo, in modo che ogni scheda avesse un titolo dell'immagine della barra delle azioni diverso.

Apprezzerei qualsiasi suggerimento e link ai tutorial! Grazie :)

qui è il mio codice: 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(); 
    } 

} 
+0

Hai provato mActionBar.setTitle ("il titolo della scheda corrente") in onPageSelected? – Blackbelt

+1

Grazie funziona, ma prima di iniziare l'app imposta prima il vecchio titolo, con il passaggio a qualsiasi scheda diventa "il titolo della scheda corrente" e rimane invariato. Lo metto dentro onPageSelected in TabAdapter.java. Dovrei metterlo dentro il frammento da solo? – user1810991

+0

Il mio era solo un esempio. Dov'è la stringa che vuoi impostare come titolo della barra delle azioni? Puoi accedervi all'interno di onPageSelected? – Blackbelt

risposta

4
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); 
} 


} 
+0

grazie allot))) funziona perfettamente! – user1810991

+0

wow era una specie di prole – Blackbelt

+0

bella soluzione .. grazie –

0
@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 

    } 
6

È necessario impostare addOnPageChangeListener alla vista cercapersone come questo

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"); 
      } 


     } 
+0

Per favore, spiega di più sulla tua risposta. – Alex

+0

Imposta questo listener al tuo cercapersone dove hai impostato l'adattatore –

+0

Ho rivisto la tua risposta. Dovresti sostenere la tua risposta. – Alex

Problemi correlati