如何从活动类外部更新appcompat工具栏的标题?

时间:2016-04-04 14:43:22

标签: android

这是一个愚蠢的问题,但我如何重置另一个类的工具栏标题。不是来自MainActivity?

public class MainActivity extends AppCompatActivity {

public Toolbar toolbar;

 toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle(R.string.app_name);

我想从TabAdapter.class更改标题。我怎么能这样做?当我试图这样做时,我得到了一个nullpointerexception。

public class TabAdapter extends FragmentPagerAdapter{

    MainActivity main = new MainActivity();
  @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:

                return MainFragment.getInstance();
            case 1:
                main.toolbar.setTitle("hello world");
                return SearchFragment.getInstance();


        }
        return null;
    }

4 个答案:

答案 0 :(得分:0)

在onResume()的SearchFragment中,使用getActivity()设置标题:

public void onResume(){
super.onResume();
((Toolbar) this.getActivity().findViewById(R.id.toolbar))
                    .setTitle("hello world");
}

答案 1 :(得分:0)

通过MainActivity main = new MainActivity();这一行,您创建了一个新的活动对象,无法用于更新当前活动。

所以

您可以通过将当前活动引用传递给适配器来设置工具栏标题。 创建adpater后,调用mathod来设置活动引用,并按以下方式执行此操作。

public class TabAdapter extends FragmentPagerAdapter {

        private AppCompatActivity activity;

        public void setActivity(AppCompatActivity activity) {
            this.activity = activity;
        }


        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    //here you can change title of toolbar


                    return MainFragment.getInstance();
                case 1:
                    //main.toolbar.setTitle("hello world");
                     updateToolbarTitle("Hello World");
                    return SearchFragment.getInstance();


            }
            return null;

        private void updateToolbarTitle(String title) {
            activity.getSupportActionBar().setTitle(title);
        }
    }
}

并在MainActivity中将活动的引用传递给适配器,如下所示

TabAdapter adapter  = new TabAdapter(/*Your params here*/);
adapter.setActivity(this);

答案 2 :(得分:0)

您不应该尝试在MainActivity课程中初始化TabAdapter

您应该从片段访问工具栏并在那里进行更改。这是一个例子:

public class MainActivity extends Activity {

    private Toolbar mToolbar;

    public Toolbar getToolbar() {
        return mToolbar;
    }

    public void onCreate(Bundle savedInstanceState) {
        // initialisation logic
        mToolbar = ... // get toolbar from layout
    }
}

public class SomeFragment extends Fragment {

    public void onResume() {
        // get the hosting activity
        final MainActivity activity = (MainActivity) getActivity();
        // get it's toolbar
        final Toolbar toolbar = activity.getToolbar();
        // set the title
        toolbar.setTitle("My Title");
    } 
}

答案 3 :(得分:0)

更好地使用它。

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                if(getSupportActionBar() != null){
                    getSupportActionBar().setTitle(mAdapter.getPageTitle(position));  
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

在你的FragmentPagerAdapter

  @Override
  public CharSequence getPageTitle(int position) {
      return title; //title for that position
  }