5

Tôi có 3 tab trong một FragmentStatePagerAdapter. Tôi có một đoạn cho tab 1 để thêm khung nhìn vào vùng chứa 'linearlayout' của nó bên trong một bố cục tương đối động. tôi thêm tự động một số chế độ xem trong đoạn 1 của tab. Tôi cũng đã thêm một đoạn hoàn chỉnh trong vùng chứa linearLayout đó với các chế độ xem khác lên và xuống. điều này hoạt động tốt .. mọi điều tốt đẹp.Trong ViewPager, khi trượt đến tab thứ 3, đoạn con trong tab1 biến mất

nhưng khi tôi truy cập trang thứ 3 và quay lại. tất cả các lượt xem đều có. nhưng mà đoạn hoàn chỉnh được biến mất ~~ EDIT
Nó biến mất từ ​​tab1 và xuất hiện bên dưới các quan điểm trong tab2 nơi childfragment khác được thêm vào ..

Trước hết tôi có một listFragment trong tab1 và tab2. dựa trên listItem, tôi tải một đoạn trong mỗi tab, cả hai đoạn trong tab1 và 2 đều tăng cùng xml và thêm các khung nhìn động, nhưng trong một số trường hợp, tôi thêm một đoạn hoàn chỉnh thay vì một khung nhìn trong layout tuyến tính được cho trong xml. Sự cố phát sinh khi tôi phải thêm hai đoạn trong cả hai đoạn mới được thêm vào trong tab 1 và tab2, sau khi chỉ có danh sách và trượt đến tab3. quay trở lại. đoạn trong 'đoạn chính tab1' biến mất và xuất hiện dưới đoạn trong 'đoạn chính tab2'

đây là ViewPager, trong đó tôi thay đổi các mảnh khác nhau bằng phương pháp SetItem (đoạn, chức vụ):

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"); 
    } 
} 

đây là làm thế nào tôi thêm đoạn của tôi để LinearLayout nơi 'll' là cách bố trí tuyến tính bên trong bố trí tương đối, đó là contentView thực tế cho đoạn trên tab1

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(); 

đây là cách bố trí của mảnh nơi mảnh khác được thêm vào trong bố cục tuyến tính '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" /> 

Trả lời

0

Tôi đã biết rằng sự cố đang sử dụng cùng một bố cục cho cả hai tab mà không thay đổi Id của nó khi chạy theo setId;

Mặc dù các đoạn nằm trong các tab khác nhau nhưng Android đã xử lý bố cục được thêm lần đầu tiên làm chính, vì vậy nếu tôi thêm một đoạn trong tab2 sau tab1 thì mọi thứ được thêm vào trong tab2 hoặc tab2 phiên bản của bố cục đó sẽ xuất hiện trong tab1 (lần đầu tiên được thêm).

Tôi đã thay đổi layoutIds khi chạy và sự cố được giải quyết.

11

Các ViewPager có tối đa offscreen giới hạn trang. Bạn có thể đặt cao hơn với setOffscreenPageLimit(int)

+0

Thực ra tôi đã nhận thấy rằng khi chuyển đến tab3, đoạn đó từ tab1 đến và được thêm vào dưới dạng xem trong tab2. nơi cùng một bản sao của relativeLayout đang được sử dụng như trong tab1. có điều gì sai trong bản sao chép cùng bố cục này cho cả hai tab không? tôi đang tăng cường bố cục trên cho cả hai tab. – ahmadalibaloch

+0

Xin lỗi, tôi phải thừa nhận là đã không đọc toàn bộ mã của bạn và cho rằng bạn đã quên mất điều này. Có lẽ bạn có thể đăng thêm một số mã của mình, vì chúng tôi không thực sự thấy người xem của bạn, v.v. Ngoài ra, không rõ 100% về những gì bạn đang cố gắng làm, với việc thêm các đoạn vào bố cục của bạn. –

+0

bằng cách giải pháp của bạn cũng hoạt động. nhưng tôi không thể hiểu được vấn đề là gì. cảm ơn.nhưng tôi không thể upvote danh tiếng của tôi là thấp hơn 15: -/ – ahmadalibaloch

Các vấn đề liên quan