2016-04-04 2 views
0

es ist eine dumme Frage, aber wie kann ich Toolbar Titel Form einer anderen Klasse zurücksetzen. Nicht von MainActivity?Wie aktualisiere ich den Titel der appcompat-Symbolleiste von außerhalb der Aktivitätsklasse?

public class MainActivity extends AppCompatActivity { 

public Toolbar toolbar; 

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

Und ich möchte Titel von TabAdapter.class ändern. Wie kann ich es tun? Wenn ich versuche, es zu tun, bekomme ich eine Null-Null-Wahrnehmung.

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

Funktioniert Ihr Code selbst? Weil Sie nicht eine Aktivität instanziieren sollen ... –

Antwort

0

In Ihrem SearchFragment in onResume() den Titel mit getActivity():

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

von MainActivity main = new MainActivity(); diese Zeile Sie ein neues Objekt der Aktivität erstellen, die verwendet werden, kippen Strom zu aktualisieren.

So.

Sie können den Symbolleistentitel festlegen, indem Sie die aktuelle Aktivitätsreferenz an den Adapter übergeben. Nach dem Erstellen des Adpaters rufen Sie das Mathod auf, um die Aktivitätsreferenz festzulegen und tun Sie dies auf folgende Weise.

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

Und in Ihrem MainActivity die Referenz der Aktivität an den Adapter passieren wie diese

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

Ich habe nullpointerException, wenn Sie versuchen, Ihren Rat zu verwenden ... –

+0

Es gibt keine Chance von Nullzeiger hier. Es muss ein anderes Problem geben. Versuchen Sie zu verfolgen, in welcher Zeile Sie diese Ausnahme erhalten –

0

Sie nicht MainActivity in Ihrer TabAdapter Klasse initialisieren sollte versuchen.

Sie sollten auf die Symbolleiste von Ihrem Fragment zugreifen und es dort ändern. Hier ein Beispiel:

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

besser verwenden Sie dies.

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) { 

      } 
     }); 

Und in Ihrem FragmentPagerAdapter

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