2012-05-16 8 views
9

Mam to PageAdapter z dniami tygodnia, dla każdego pagera mam ten sam układ. Mój problem polega na tym, jak zaktualizować właściwą listęView, gdy zmienia się dzień. Kiedy zmieniam dzień, w którym Pager tworzy nowy pager i usuwa inny, kiedy tak się stało, mój listview wskazuje na nowy pager, ale nie na bieżący. Na przykład, jest wedneyday i zapisuję odnośnik listview, kiedy zmieniam na wtorek pager poniedziałek jest tworzony i czwartek jest usuwany, a mój punkt odniesienia do ostatniej strony tworzy (poniedziałek), ale jestem we wtorek.Jak aktualizować zawartość ViewPager?

Moja pageAdapter:

ListView lvwConfig; 

@Override 
public Object instantiateItem(View pager, int position) { 
    LayoutInflater inflater = (LayoutInflater) mContext 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View v = inflater.inflate(R.layout.pager_layout, null); 
    lvwConfig = (ListView) v.findViewById(R.id.lvwConfig); 
    ((ViewPager) pager).addView(v, 0); 

    return v; 
} 

chcę do ListView zawsze wskazywać pogrupowanych bieżącego elementu.

+0

http://stackoverflow.com/questions/33012056/view-pager-first-and-second-fragment-data-is-not-updating-when-data-changed-in-a –

Odpowiedz

39

Przeczytaj ten artykuł: PagerAdapter

można zaimplementować tę funkcję w PagerAdapter:

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

później, można stosować tę funkcję:

yourPagerAdapterObject.notifyDataSetChanged(); 

Metoda ta jest źle, jeśli masz zbyt wiele widoków do wyświetlenia. Wszystkie widoki są zawsze ponownie obliczane. Ale w twoim przypadku, dla niektórych poglądów, jest w porządku.

+0

zobacz post http : //stackoverflow.com/questions/33012056/view-pager-first-and-second-fragment-data-is-not-updating-when-data-changed-in-a –

5

Zastępowanie getItemPosition w PagerAdapter jest łatwiejsze, ale bardziej nieefektywne. W ten sposób, wywołując notifyDataSetChanged(), pager widoku usunie wszystkie widoki i załaduje je ponownie. W ten sposób uzyskuje się efekt przeładowania. Inna opcja, suggested by alvarolb, to setTag() metoda w instantiateItem() podczas tworzenia nowego widoku. Zamiast korzystać z notifyDataSetChanged(), możesz użyć findViewWithTag(), aby znaleźć widok, który chcesz zaktualizować.

Powiązane problemy