Estoy usando ViewPager y TabLayout con 5 fragmentos. Mi código mostró si hago clic en un botón que en el primer o tercer fragmento, datos en el segundo fragmento. Pero ViewPager ya está en la página anterior y siguiente, por lo que el segundo fragmento no se actualiza directamente. El segundo fragmento tiene ListView y muestra datos en orden regular. Cuando voy al cuarto o quinto fragmento y regreso al segundo fragmento, los datos se actualizan. Porque ViewPager acaba de dibujar un segundo fragmento.

Encontré muchas informaciones sobre este problema. Mucha gente dice que para resolverlo, debería usar 'setUserVisibleHint'. Pero no sé cómo usar esa función en mi caso.

Para resolver este problema, ¿debo usar 'setUserVisibleHint'? Entonces, ¿cómo lo aplico?

O ¿Hay algún otro método?

Aquí está mi segundo código de fragmento.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.accesslog_layout, container, false);

    adapter = new ListViewAdapter(getActivity().getApplicationContext());

    listView = (ListView) view.findViewById(R.id.Accesslog_listView);
    emptyElement = (TextView) view.findViewById(R.id.empty_element);

    listView.setAdapter(adapter);
    listView.setOnItemLongClickListener(itemLongClickListener);
    listView.setEmptyView(emptyElement);

    check_editName = (TextView) view.findViewById(R.id.Room_State);
    listView.setOverScrollMode(view.OVER_SCROLL_ALWAYS);

    accessTable = AccessTable.instance();//(getActivity().getApplicationContext());

    logD(TAG, "TestTable Dbug===Fragment====AccessLog============ ");

    loadAllFromDB();

    return view;
}

================================== Actualización =============== ===================

¿Dónde debo poner el código "getItemPosition ()" y "notifyDataSetChanged ()"?

Aquí está mi código de adaptador.

public class TabPagerAdapter extends FragmentStatePagerAdapter {

private int tabCount;

public TabPagerAdapter(FragmentManager fm, int tabCount){

    super(fm);
    this.tabCount = tabCount;

}

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
} // Here is right? and is this right code?

@Override
public Fragment getItem(int position){

    switch (position){
        case 0:
            HomeFragment fragment1 = new HomeFragment();
            return fragment1;

        case 1:
            AccessLogFragment fragment2 = new AccessLogFragment();
            return fragment2;

        case 2:
            RegistrationFragment fragment3 = new RegistrationFragment();
            return fragment3;

        case 3:
            SettingFragment fragment4 = new SettingFragment();
            return fragment4;

        case 4:
            HelpFragment fragment5 = new HelpFragment();
            return fragment5;

        default:
            return null;
    }

}

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

}

0
오영택 7 mar. 2018 a las 04:56

3 respuestas

La mejor respuesta

Anule el método en su segundo fragmento. Sigue esta plantilla:

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        if(isResumed() && isVisibleToUser) {
            //Update your data
        } else {
            //Do nothing
        }
    }
0
Cao Minh Vu 7 mar. 2018 a las 02:03

Después de hacer clic en el botón, puede escribir una bandera en SharedPreferences o database. Cuando vuelva al segundo fragmento, verifique si la bandera sale y actualice los datos.

0
Qian Sijianhao 7 mar. 2018 a las 02:34

Puede llamar a notifyDataSetChanged() en su PagerAdapter para actualizar fragmentos con nuevos datos.

0
ahomphophone 7 mar. 2018 a las 02:25