2016-04-04 19 views
0

それは愚かな質問ですが、私はどのようにツールバーのタイトルを別のクラスからリセットすることができます。 MainActivityからではありませんか?アクティビティクラスの外部からappcompatツールバーのタイトルを更新するにはどうすればよいですか?

public class MainActivity extends AppCompatActivity { 

public Toolbar toolbar; 

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

そして、私はTabAdapter.classからタイトルを変更したいと思います。どうすればいいですか?私はそれをやろうとしていますが、私はnullpointerexceptionを得ています。 MainActivity main = new MainActivity();あなたが現在を更新するために使用されるカント活動の新しいオブジェクトを作成している。この線で

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

あなたのコードでも動作しますか?あなたがアクティビティをインスタンス化するはずではないからです... –

答えて

0

はgetActivityを使用してタイトルを()に設定しました。

So.

現在のアクティビティ参照をアダプタに渡すことによって、ツールバーのタイトルを設定できます。 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クラスでMainActivityを初期化しようとするべきではありません。この

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

:onResumeでのごSearchFragment()内

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; 
    } 
+0

あなたのアドバイスを使用しようとするとnullpointerExceptionが発生しました... –

+0

ここではnullポインタの可能性はありません。別の問題があるはずです。あなたがその例外をどのラインで取得しているのかを調べてみてください –

0

のようなアダプタに活動の参照を渡すインチ

フラグメントからツールバーにアクセスして変更する必要があります。ここに例があります:

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"); 
    } 
} 
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 
    } 
関連する問題