Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android上更改每个标签滑动的操作栏标题_Android_Android Fragments_Android Actionbar_Actionbarsherlock_Tabbar - Fatal编程技术网

在android上更改每个标签滑动的操作栏标题

在android上更改每个标签滑动的操作栏标题,android,android-fragments,android-actionbar,actionbarsherlock,tabbar,Android,Android Fragments,Android Actionbar,Actionbarsherlock,Tabbar,我已经使用ActionBarSherlock和Fragments设置了带有滑动标签的操作栏 我希望每个选项卡都有不同的操作栏标题。如果我可以设置图像而不是标题,那就太好了,这样每个选项卡都会有不同的操作栏图像标题 如果有任何建议和教程链接,我将不胜感激!谢谢:) 这是我的密码: TabActivity.java package com.tptabs; import android.os.Bundle; import android.app.Activity; import android.vi

我已经使用ActionBarSherlock和Fragments设置了带有滑动标签的操作栏

我希望每个选项卡都有不同的操作栏标题。如果我可以设置图像而不是标题,那就太好了,这样每个选项卡都会有不同的操作栏图像标题

如果有任何建议和教程链接,我将不胜感激!谢谢:)

这是我的密码: 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();
    }

}
package com.tptabs;
导入java.util.ArrayList;
导入android.content.Context;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.support.v4.app.FragmentPagerAdapter;
导入android.support.v4.app.FragmentTransaction;
导入android.support.v4.view.ViewPager;
导入android.util.Log;
导入android.widget.Toast;
导入com.actionbarsherlock.app.ActionBar;
导入com.actionbarsherlock.app.ActionBar.Tab;
导入com.actionbarsherlock.app.SherlockFragmentActivity;
公共类TabAdapter扩展FragmentPagerAdapter实现ActionBar.TablListener、ViewPager.OnPageChangeListener{
私有最终上下文mContext;
私人终审法院;
专用最终查看页面mViewPager;
private final ArrayList mtab=new ArrayList();
私有最终字符串标记=“第21次轮询:”;
静态最终类TabInfo{
私人期末班;
私有最终包args;
TabInfo(类_类,捆绑参数){
clss=_类;
args=_args;
}
}
公共选项卡适配器(SherlockFragmentActivity fa、ViewPager寻呼机){
super(fa.getSupportFragmentManager());
mContext=fa;
mActionBar=fa.getSupportActionBar();
mViewPager=寻呼机;
mViewPager.setAdapter(此);
mViewPager.setOnPageChangeListener(此);
}
public void addTab(ActionBar.Tab选项卡,类cls,Bundle args){
TabInfo=新的TabInfo(clss,args);
tab.setTag(信息);
tab.setTableListener(此);
添加(信息);
mActionBar.addTab(tab);
notifyDataSetChanged();
}
@凌驾
公共无效onPageScrollStateChanged(int状态){
}
@凌驾
已滚动页面上的公共无效(int-position、float-positionOffset、int-positionOffsetPixels){
}
@凌驾
已选择页面上的公共无效(内部位置){
mActionBar.setSelectedNavigationItem(位置);
}
@凌驾
已选择的公共事务(选项卡,碎片事务ft){
setCurrentItem(tab.getPosition());
Log.v(标记“点击”);
Object tag=tab.getTag();
对于(int i=0;i
公共类TabAdapter扩展FragmentPagerAdapter实现ActionBar.TableListener、ViewPager.OnPageChangeListener{
int resId={R.drawable.position0,R.drawable.position1,R.drawable.position2,R.drawable.position3,R.drawable.position4};
@凌驾
已选择页面上的公共无效(内部位置){
mActionBar.setSelectedNavigationItem(位置);
int resIdLenght=resId.length;
如果(位置<0 | |位置>=剩余长度)
返回;
int drawableId=剩余[位置];
mActionBar.setIcon(drawableId);
}
}

您需要像这样将addOnPageChangeListener设置为您的视图寻呼机

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


        }

你在onPageSelected中尝试过mActionBar.setTitle(“你当前的选项卡标题”)吗?谢谢,它可以工作,但在我启动应用程序后,它会先设置旧标题,然后滑动到任何选项卡,它会更改为“你当前的选项卡标题”它保持不变。我把它放在TabAdapter.java中的onPageSelected中。我应该把它放在片段中吗?我的只是一个例子。你想设置为actionbar标题的字符串在哪里?你能在onPageSelected中访问它吗?我还没有创建任何字符串,事实上我想使用一个替代的图像,我认为它应该是posible访问它在网页内选择。我想有不同的行动栏标题图像为每个tab@Blackbelt这是可行的,但我有一个小问题,第一个选项卡位置0在我打开应用程序后不会加载。当打开第二个选项卡并返回到第一个选项卡时,它会显示图像位置0。这是为什么?@modabeckham,我不知道,我是sorry@Blackbelt thnx没问题,请详细解释您的答案。将此听众设置为您的查看页面,您可以在其中设置适配器。我审阅了您的答案。您应该支持您的答案。对不起,但我该怎么做。我是堆栈溢出新手。您可以编辑您的答案并添加详细信息。现在可以,请下次再这样做。
@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

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


        }