7

ActionBarSherlockとFragmentsを使用してスワイプタブでアクションバーを設定しました。各タブのアクションバーのタイトルを変更するandroid

各タブごとに異なるアクションバーのタイトルが必要です。タイトルの代わりに画像を設定できるので、それぞれのタブに異なるアクションバーの画像タイトルが付いていれば素晴らしいだろう。

私はチュートリアルへの提案やリンクを感謝します!感謝:)

ここでは私のコードです:このようなあなたのビューのポケットベルにaddOnPageChangeListenerを設定する必要が 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

onPageSelected内でmActionBar.setTitle( "現在のタブのタイトル")を試しましたか? – Blackbelt

+1

ありがとう、それは動作しますが、私は古いタイトルを最初に設定するアプリを起動するよりも、あなたの現在のタブのタイトルに変更されたすべてのタブにスワイプで、それは同じままです。私はTabAdapter.javaのonPageSelectedの中に入れます。私は断片の中に置くべきでしょうか? – user1810991

+0

鉱山は単なる例であった。アクションバーのタイトルとして設定する文字列はどこですか?あなたはonPageSelectedの中でそれにアクセスできますか? – Blackbelt

答えて

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

おかあさん)))それは完璧に動作します! – user1810991

+0

うわーそれは子孫だった – Blackbelt

+0

良い解決策..ありがとう –

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

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

あなたの答えをさらに説明してください。 – Alex

+0

アダプターを設定したビューページャーにこの受話器を設定してください –

+0

回答を確認しました。あなたはあなたの答えをサポートすべきです。 – Alex

関連する問題