Tengo una simple aplicación de mensajería módulo. En el cual, hay dos swipable pestañas. Recibidos y Enviados.
Digamos que tengo 20 mensajes de los cuales 10 son no leídos. Así que lo que estoy haciendo es mostrar las fichas Recibidas – (10). Ahora, cuando leo el mensaje, marca el mensaje como leído. Así que me gustaría cambiar el título de Recibido – (10) a – (9).

Por favor, hágamelo saber cómo puedo hacerlo?

Este es el código que estoy utilizando.

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

@Override
public CharSequence getPageTitle(int position) {

    if (position == 0) {
        //if position is zero, set the title to RECEIVED.
        return "Received" + " (" + String.valueOf(intUnreadReceivedMessagesCount) + ")";
    } else {
        //if position is 1, set the title to SENT.
        return "Sent";
    }
}

Yo estoy usando el Localizador de Deslizamiento Ficha Tira como un Localizador Ficha de la biblioteca. https://github.com/astuetz/PagerSlidingTabStrip

He intentado usar notifyDataSetChanged (), pero por razones obvias, no lo llaman. De cualquier manera para resolver el problema. Alguna alternativa mejor para mostrar y actualizar el conteo también es bienvenida.

Gracias.

3 Comentarios

  1. 15

    Es sólo una conjetura sin ver el resto de su código.

    notifyDataSetChanged() debería estar trabajando, pero hay un truco. Usted tiene que reemplazar un método en el adaptador:

    public int getItemPosition(Object item) {
        return POSITION_NONE;
    }

    Esta forma de llamar a notifyDataSetChanged() actualizará actualmente visible de la página y los vecinos.

    Sin ella, sólo las nuevas páginas se actualizan.

    Actualización

    Yo veía en la biblioteca de enlaces. Hay un método público notifyDataSetChanged() como para el adaptador. Así que simplemente asignar un id para que PagerSlidingTabStrip dentro de XML y obtener una referencia en el código. A continuación, llame al:

    adapter.notifyDataSetChanged();
    tabStrip.notifyDataSetChanged();
    • He tratado de esta opción. Pero va a getCount() método. No entra dentro de getPageTitle(). Y también quiero actualizar no sólo las páginas, pero los títulos de las páginas así. en el PagerTabStrip que viene de getPageTitle(int), basado en la ubicación del índice. He intentado invalidar la opinión de buscapersonas así. Pero no funcionó.
    • Intenta defecto PagerTitleStrip? Sólo para asegurarse de que este 3 de lib no está causando el problema. Mantener getItemPosition() para la prueba.
    • Se puede también decir que ViewPager adaptador de aplicación estás usando?
    • Estoy extendiendo FragmentStatePagerAdapter utilizar PagerAdapter. Y sí, he intentado getItemPosition() así. Pero no, es no volver a invocar el getPageTitle método.
    • He actualizado mi respuesta. Debería funcionar ahora.
    • Impresionante hombre! Gracias por su ayuda.

  2. 6

    Aceptado respuesta no trabajo para mí, el uso de una costumbre PagerAdapter, y android.support.design.widget.TabLayout para las pestañas.

    Esto funcionó para mí:

    private void refreshTabTitles() {
        for (int i = 0; i < adapter.getCount(); i++) {
            Tab tab = tabs.getTabAt(i);
            if (tab != null) {
                tab.setText(adapter.getPageTitle(i));
            }
        }
    }
    • Otra forma es llamar a tabLayout.setupWithViewPager(viewPager); cada vez que usted necesita para actualizar el texto.
    • este restablecimiento de las pestañas a la primera ficha, en este caso, si usted no está en la posición 0 de este modo se creará problema
  3. 0

    Utilizando PagerTabStrip:

    Hice simplemente una llamada de dentro de del adaptador de InstantiateItem método para

    this.GetPageTitleFormatted(position);

    y voilá, ¡funcionó!

Dejar respuesta

Please enter your comment!
Please enter your name here