0

Je souhaite modifier le titre d'un onglet dans une activité à onglets. Actuellement avec le code ci-dessous je pourrais passer à l'onglet, mais incapable de changer le titre de l'onglet à l'arrivée de la notification.Modifier le titre de l'onglet dans une activité de fragment

Comment puis-je changer le titre de l'onglet.

ViewPager viewPager = (ViewPager) AllTabs.mViewPager.findViewById(R.id.container); 
        int currentTab = viewPager.getCurrentItem(); 
        viewPager.setCurrentItem(1); 

Le code ci-dessus permet de modifier ou de passer à mytab. code Essayez ci-dessous pour vérifier le titre d'un onglet

PagerAdapter pagerAdapter = new PagerAdapter() { 
          @Override 
          public int getCount() { 
           return 0; 
          } 

          @Override 
          public boolean isViewFromObject(View view, Object object) { 
           return false; 
          } 
         }; 
         Log.e("ServerManager_Title",pagerAdapter.getPageTitle(1).toString()); 
         pagerAdapter.notifyDataSetChanged(); 

mais comme le pagerAdapter est associé à aucun onglet lancer son NullPointerException sur appel de toute méthode.

12-22 11:27:37.049 20448-20448/com.moodoff E/AndroidRuntime: FATAL EXCEPTION: main 
                  Process: com.moodoff, PID: 20448 
                  java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.lang.CharSequence.toString()' on a null object reference 
                   at com.moodoff.helper.ServerManager$3.run(ServerManager.java:199) 
                   at android.os.Handler.handleCallback(Handler.java:815) 
                   at android.os.Handler.dispatchMessage(Handler.java:104) 
                   at android.os.Looper.loop(Looper.java:207) 
                   at android.app.ActivityThread.main(ActivityThread.java:5776) 
                   at java.lang.reflect.Method.invoke(Native Method) 
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) 

Mes codes: Dans ServerManager.java fichier

En AllTabs.java qui accueille tous les onglets ou est l'activité principale qui a tous les onglets AllTabs public class étend AppCompatActivity met en œuvre ViewPager. OnPageChangeListener {

/** 
* The {@link android.support.v4.view.PagerAdapter} that will provide 
* fragments for each of the sections. We use a 
* {@link FragmentPagerAdapter} derivative, which will keep every 
* loaded fragment in memory. If this becomes too memory intensive, it 
* may be best to switch to a 
* {@link android.support.v4.app.FragmentStatePagerAdapter}. 
*/ 
private SectionsPagerAdapter mSectionsPagerAdapter; 

/** 
* The {@link ViewPager} that will host the section contents. 
*/ 
//private ViewPager mViewPager; 
public static ViewPager mViewPager; 


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

    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the activity. 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 


    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(mViewPager); 

    //Request all the dangerous permissions over here 

} 

@Override 
public void onPageScrollStateChanged(int state) { 

} 

@Override 
public void onPageSelected(int position) { 

} 

@Override 
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

} 

Ami faire la bonne manière? À l'arrivée des notifications, je veux afficher un nombre (un nombre) sur mon deuxième onglet (peu importe dans quel onglet je suis sur les trois onglets que j'ai) ce nombre est dynamique et donc une fois la notification apparaît, je dois comptez cela et affichez ie change le titre du second onglet en un nouveau titre basé sur le compte dynamique.

+0

getPageTitle (1) .toString() null –

+0

@Charuka: ouais je sais que parce que le pageradapter n'est associé à aucun fragment, mais ma préoccupation actuelle est comment puis-je essayer de changer le titre d'un onglet. – Santanu

+0

Vous devez d'abord transmettre votre tableau de titres dans votre adaptateur, puis essayer d'obtenir le nom de l'onglet à l'aide de l'objet adaptateur et modifier le nom de votre onglet. – Shailesh

Répondre

0

1.RAPPORT devrait mettre en œuvre un OnPageChangeListener

2.Créez votre ViewPager

3.you peut utiliser viewPager.setOnPageChangeListener(this)

4.

@Override 
     public abstract void onPageSelected(int position) { 
      setTitle(getTitleFromPosition(position)); 
     } 

alors pagerAdapter.getPageTitle(1).toString() ne sera pas null

Voir here

si ViewPager.setOnPageChangeListener ne fonctionne pas parce qu'il est dépréciée maintenant utiliser ViewPager.addOnPageChangeListener à la place.

par exemple,

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

     } 

     @Override 
     public void onPageSelected(int position) { 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 
+0

setOnPageChangeListener est obsolète – Santanu

+0

puis utilisez ViewPager.addOnPageChangeListener –

+0

pouvez-vous vérifier ma modification en question. J'ai ajouté le code que j'ai ajouté. Ça ne fonctionne pas. S'il vous plaît vérifier une fois. Je souhaite changer le titre uniquement après l'arrivée d'une nouvelle notification dans la barre de notification. – Santanu

0

Comme @Charuka qui est également possible et vous pouvez le faire de cette façon aussi.

viewPager = (ViewPager) findViewById(R.id.viewpager); 
setupViewPager(viewPager); 

tabLayout = (TabLayout) findViewById(R.id.tabs); 
tabLayout.setupWithViewPager(viewPager); 

Cette méthode vous permet de configurer ViewPager Adapter.

private void setupViewPager(ViewPager viewPager) 
{ 
    try 
    { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFrag(new FragmentGeneral(), "GENERAL"); 
     adapter.addFrag(new FragmentInterests(), "INTERESTS"); 
     adapter.addFrag(new FragmentAlert(), "ALERTS"); 
     adapter.addFrag(new FragmentSocial(), "SOCIAL"); 
     viewPager.setAdapter(adapter); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

Maintenant créer la classe ViewPagerAdapter qui est vous traiter titre et fragment Tab

private class ViewPagerAdapter extends FragmentPagerAdapter 
    { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFrag(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 

      //here you can set your custom title by using position 
      if (position==1) 
       return "Title"; 
      else 
       return mFragmentTitleList.get(position); 
     } 
    } 

Pour plus de détails s'il vous plaît vérifier this et this.

+0

Ce que je fais est: – Santanu