5

Mam 3 karty w FragmentStatePagerAdapter. Mam fragment dla zakładki 1, który dynamicznie dodaje widoki do kontenera "linearlayout" wewnątrz układu względnego. Dodaję dynamicznie niektóre widoki w fragmencie 1 karty. Dodałem również pełny fragment w tym pojemniku linearLayout z innymi widokami w górę iw dół. to działa dobrze ... wszystko dobrze.W aplikacji ViewPager po przesunięciu do trzeciej karty fragment dziecka na karcie 1 znika

ale kiedy przejdę na trzecią stronę i wrócę. wszystkie widoki są tam. ale to kompletny fragment zniknął ~~ EDIT
znika ona z Wypustu1 i pojawia się pod poglądami w Karta2 gdzie dodaje inny childfragment ..

Przede wszystkim mam listFragment w Wypustu1 i Karta2. na podstawie listItem kliknij i załaduj fragment na każdej karcie, że oba fragmenty w tab1 i 2 nadymają to samo poniżej xml i dodaje dynamiczne widoki, ale w niektórych przypadkach dodaję cały fragment zamiast widoku w układzie liniowym podanym w xml. Problem Powstał, gdy muszę dodać dwa fragmenty w nowych dodanych fragmentach na zakładce 1 i tab2, po tym, jak były tylko listy i przesunięte do tab3. po powrocie. Fragment w „Wypustu1 głównego fragmentu” zniknął i pojawił się pod fragmentem „Karta2 głównego fragmentu”

to jest viewpager, w którym zmienia różne fragmenty metodą setItem (fragment, stanowisko)

public static class ScreenSlidePagerAdapter extends 
     FragmentStatePagerAdapter { 

    public static ArrayList<Fragment> tabs_fragments = new ArrayList<Fragment>(
      3); 

    public ScreenSlidePagerAdapter(FragmentManager fm, 
      ArrayList<Fragment> tabs) { 
     super(fm); 
     ScreenSlidePagerAdapter.tabs_fragments = tabs; 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
     return tabs_fragments.get(arg0); 
    } 

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

    @Override 
    public int getItemPosition(Object object) { 
     if (tabs_fragments.contains(object)) { 
      return POSITION_UNCHANGED; 
     } 
     return POSITION_NONE; 
    } 

    public static void setItem(Fragment fr, int position) { 
     if (position <= 2 && position >= 0) { 
      tabs_fragments.remove(position); 
      tabs_fragments.add(position, fr); 
     } else 
      Log.d("adding tab", "wrong tab position to add fragment at"); 
    } 
} 

to w jaki sposób mogę dodać moje fragmentu do linearlayout gdzie „ll” jest liniowy układ wewnątrz względnego układu, który jest rzeczywisty contentView dla fragmentu na Wypustu1

ll.addView(getTitle("Set Message Receive Settings")); 
     // View smsRecLayout = inflater.inflate(R.layout.fr_ev_sms_receive, 
     // container, false); 
     Bundle b = new Bundle(); 
     b.putInt("id", eventId); 
     b.putInt("event", eventTypeId); 
     Fragment fr = new FrEv_SMSReceive(); 
     fr.setArguments(b); 
     getFragmentManager().beginTransaction() 
       .add(ll.getId(), fr, "fr_sms_receive").commit(); 

to układ fragmentu gdzie dodawany jest kolejny fragment w układzie liniowym "fr_e vent_container ". FragmentStatePagerAdapter

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".EventDetails" > 

<TextView 
    android:id="@+id/title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:gravity="center_horizontal" 
    android:padding="10dp" 
    android:textIsSelectable="false" /> 

<ScrollView 
    android:id="@+id/fr_event_container_scroll" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:layout_above="@+id/sep1" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/title" > 

    <LinearLayout 
     android:id="@+id/fr_event_container" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 
    </LinearLayout> 
</ScrollView> 

<View 
    android:id="@+id/sep1" 
    android:layout_width="fill_parent" 
    android:layout_height="2dp" 
    android:layout_above="@+id/addOther" 
    android:layout_centerHorizontal="true" 
    android:layout_margin="10dp" 
    android:background="#000" 
    android:padding="10dp" 
    android:visibility="gone" /> 

<Button 
    android:id="@+id/next" 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/addOther" 
    android:layout_alignBottom="@+id/addOther" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="54dp" 
    android:text="Next" 
    android:width="90dp" /> 

Odpowiedz

0

I poznali, że problem był w użyciu tego samego układu dla obu kartach bez zmiany jego ID w czasie wykonywania przez setId;

Mimo że fragmenty były w różnych zakładkach, ale Android traktował układ, który został po raz pierwszy dodany jako główny, więc jeśli dodałem fragment w tab2 po tab1, to każda rzecz dodana w tab2 lub tab2 wersja tego układu była w tab1 (pierwsze dodane).

Zmieniłem layoutIds w czasie wykonywania i problem został rozwiązany.

11

ViewPager ma maksymalnie OffScreen limitu stron. Można ustawić go wyżej z setOffscreenPageLimit(int)

+0

Właściwie zauważyłem, że po przejściu do tab3, ten fragment z tab1 przychodzi i jest dodawany pod widokami w tab2. gdzie używana jest ta sama kopia metody relativeLayout, jak w tab1. Czy jest coś nie tak w kopiowaniu tego samego układu dla obu kart? Nadpisuję powyższy układ dla obu kart. – ahmadalibaloch

+0

Przepraszam, muszę przyznać, że nie przeczytałem całego twojego kodu i założyłem, że zapomniałeś o tej wspólnej pułapce. Być może możesz opublikować trochę więcej kodu, ponieważ nie widzimy twojego podglądu itp. Nie jest też w 100% jasne, co próbujesz zrobić, dodając fragmenty do swojego układu. –

+0

dzięki swojemu rozwiązaniu również działa. ale nie mogę zrozumieć, na czym polega problem. dzięki.ale nie mogę przegłosować, że moja reputacja jest niższa niż 15: -/ – ahmadalibaloch

Powiązane problemy