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
Java 如何在选项卡更改时更改活动标题(幻灯片布局)_Java_Android_Android Studio - Fatal编程技术网

Java 如何在选项卡更改时更改活动标题(幻灯片布局)

Java 如何在选项卡更改时更改活动标题(幻灯片布局),java,android,android-studio,Java,Android,Android Studio,我已经找了三天的时间来解决这个问题。我试过很多方法,但都做不好。(或者我在哪里做错了什么)。 所以,我要做的是将活动标题更改为当前选项卡名称,每次更改选项卡时,活动标题也应该更改 所以我有一个主要的活动,我有3个标签和3个不同的标签片段。以下是主要活动: public class MainActivity extends ActionBarActivity { private Toolbar toolbar; private ViewPa

我已经找了三天的时间来解决这个问题。我试过很多方法,但都做不好。(或者我在哪里做错了什么)。 所以,我要做的是将活动标题更改为当前选项卡名称,每次更改选项卡时,活动标题也应该更改

所以我有一个主要的活动,我有3个标签和3个不同的标签片段。以下是主要活动:

public class MainActivity extends ActionBarActivity {

    private Toolbar toolbar;                    
    private ViewPager mPager;                   
    private SlidingTabLayout mTabs;             

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = (Toolbar) findViewById(R.id.app_bar);             
        setSupportActionBar(toolbar);

        mPager = (ViewPager) findViewById(R.id.pager);              
        mPager.setAdapter(new CustomPagerAdapter(getSupportFragmentManager()));
        mTabs = (SlidingTabLayout) findViewById(R.id.tabs);         
        mTabs.setDistributeEvenly(true);
        mTabs.setViewPager(mPager);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    //Custom ViewPager for the tabs
    class CustomPagerAdapter extends FragmentPagerAdapter {
        String[] tabsTitles;
        String vpPager;

        public CustomPagerAdapter(FragmentManager fm) {
            super(fm);
            tabsTitles = getResources().getStringArray(R.array.tabTitles);
        }

        @Override
        public Fragment getItem(int position) {
            //if (position == 0){
            //    news_fragment news_fragment = new news_fragment();
            //    return news_fragment;
            //}
            if (position == 1){
                login_fragment login_fragment = new login_fragment();
                return login_fragment;
            }
            else if (position == 2){
                about_fragment about_fragment = new about_fragment();
                return about_fragment;
            }
            else {
                news_fragment news_fragment = new news_fragment();
                return news_fragment;
            }
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return tabsTitles[position];
        }

        @Override
        public int getCount() {
            return 3;
        }
    }

}

当你改变活动时,我正在使用这个。第一次lt
onCreate
方法运行。因此,在您的
onCreate
中,获取
ActionBar
并设置其标题

示例

 ActionBar actionBar = getActionBar();
 actionBar.setTitle("title");
注意:如果您正在使用
操作栏的支持库,请将
getActionBar()
更改为
getSupportActionBar()
,尝试以下方法:

viewpager
                .setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

                    @Override
                    public void onPageSelected(int position) {
                        // TODO Auto-generated method stub


                        actionBar.setTitle(tabsTitles[position]);
                    }

                    @Override
                    public void onPageScrolled(int arg0, float arg1, int arg2) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onPageScrollStateChanged(int pos) {
                        // TODO Auto-generated method stub

                    }
                });
也试试这个:

class CustomPagerAdapter extends FragmentPagerAdapter {
    ....
    Toolbar toolbar;

    public CustomPagerAdapter(FragmentManager fm, Toolbar toolbar) {
        ...
        this.toolbar = toolbar;
    }

    @Override
    public Fragment getItem(int position) {

        toolbar.setTitle(getPageTitle(position));
        ...
    }
    ...
}

通过放大某些布局,在活动中设置自定义操作栏,如(Oncreate之后):


在自定义布局和片段的onresume方法中使用getactivity()获取文本视图的id,然后设置标题,iit将正常工作。

此解决方案会导致应用程序崩溃。错误:在java.lang.reflect.Method.invoke(本机方法)的java.lang.reflect.Method.invoke(Method.java:372)的android.app.ActivityThread.main(ActivityThread.java:5221)中,“抛出新的RuntimeException(“主线程循环意外退出”);”。谢谢你的回答:-)。您是否可以提出其他建议?此解决方案为活动提供静态标题。(我已经有了)。我想做的是,当标签改变时,标题也会改变。谢谢你的回答:-)。你认为你可以提出其他建议吗?你完成了吗?还是它还在等待?等待。“Surender Kumar”的回答确实解决了标题部分,但它带来了一个新问题。指示器不再移动>。哇,这一个有效。但是现在有一个小问题。指示器和选项卡颜色不再更改为当前选项卡。它停留在第一个标签上。你能告诉我如何解决这个问题吗?将viewpager.setonchnagelistener更改为mTabs.setonchnagelistenerAwesome,我以前用过mPager,这就是指示器卡住的原因。谢谢你,伙计。你帮我省去了很多麻烦和时间。谢谢大家从这个了不起的网站^_^现在不推荐使用这种方法。改用mViewPager.addOnPageChangeListener
    android.app.ActionBar bar = getActionBar();
    bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#ffffff")));
    bar.setDisplayShowHomeEnabled(false);
    bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    bar.setCustomView(R.layout.homescreen_actionbar);