Damien R.
Damien R.

Reputation: 3373

ViewPager of Fragments in a Fragment is always blank

I'm turning a bit crazy on this one.
I've a Fragment that contain a ViewPager. I want this ViewPager to contain some Fragment. (Always the same, but with different parameters).
The Fragments are created (at least the 2 firsts) but my ViewPager content stay blank and nothing move.
Did I missed something ?

My FragmentActivity

public class TrackingActivity extends FragmentActivity {
    static FragmentManager fragmentManager;
    static FragmentTransaction fragmentTransaction;

    static TrackingMensurationsFragment mensurationFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tracking);

        fragmentManager = getSupportFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();

        mensurationFragment = new TrackingMensurationsFragment();
        fragmentTransaction.add(R.id.fragmentContainerLL, mensurationFragment);

        fragmentTransaction.commit();   
    }
}

My TrackingMensurationsFragment Fragment:

public class TrackingMensurationsFragment extends Fragment {
    View fragmentView;
    ViewPager pager;
    FragmentAdapter pageAdapter;
    TrackingMensurationPagerAdapter viewAdapter;
    Handler mHandler;
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        fragmentView = inflater.inflate(R.layout.fragment_tracking_mensurations, container, false);

        // new setAdapterTask().execute();
        return fragmentView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        pager = (ViewPager) getView().findViewById(R.id.pager);
        String flux = ((MyApp) getActivity().getApplicationContext()).getWebResponse(18);

        List<Fragment> fragments = new Vector<Fragment>();
        try {
            JSONArray jArray = new JSONObject(flux).getJSONArray("Mensurations");
            for (int i = (jArray.length() - 1); i >= 0; i--) {
                Bundle bundle = new Bundle();
                bundle.putString("ARM_SIZE", jArray.getJSONObject(i).getString("ARM_SIZE"));
                bundle.putString("THIGH_SIZE", jArray.getJSONObject(i).getString("THIGH_SIZE"));
                bundle.putString("HIP_SIZE", jArray.getJSONObject(i).getString("HIP_SIZE"));
                bundle.putString("WAIST_SIZE", jArray.getJSONObject(i).getString("WAIST_SIZE"));
                bundle.putString("DietData_Date", jArray.getJSONObject(i).getString("DietData_Date").substring(0, 5));
                fragments.add(Fragment.instantiate(getActivity(), TrackingMensurationPagerFragment.class.getName(), bundle));
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
pageAdapter = new FragmentAdapter(getChildFragmentManager(), fragments);
        mHandler = new Handler();
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                pager.setAdapter(pageAdapter);     
            }
        });
    }
}

With the ViewPager in the xml:

<android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

My FragmentAdapter:

public class FragmentAdapter extends FragmentStatePagerAdapter{
    private List<Fragment> fragments;

    public FragmentAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
        Log.d("FragmentAdapter","constructor");
    }

    @Override
    public Fragment getItem(int position) {
        Log.d("FragmentAdapter","getItem "+position);
        return this.fragments.get(position);
    }

    @Override
    public int getCount() {
        Log.d("FragmentAdapter","getCount: "+this.fragments.size());
        return this.fragments.size();
    }   

    @Override
    public int getItemPosition(Object object){
        return PagerAdapter.POSITION_NONE;
    }
}

My LogCat output:

D/FragmentAdapter(30805): constructor D/FragmentAdapter(30805): getCount: 12 D/dflkjghkldfjghdfkjg(30805): qgsdhgklsqdjghjdfskg D/FragmentAdapter(30805): getCount: 12 D/FragmentAdapter(30805): getItem 0 D/FragmentAdapter(30805): getItem 1 D/FragmentAdapter(30805): getCount: 12 D/dalvikvm(30805): GC_FOR_ALLOC freed 322K, 30% free 12905K/18311K, paused 30ms, total 30ms I/dalvikvm-heap(30805): Grow heap (frag case) to 14.546MB for 737536-byte allocation D/dalvikvm(30805): GC_FOR_ALLOC freed 1K, 29% free 13624K/19079K, paused 20ms, total 20ms D/TrackingMensurationPagerFragment(30805): date:02/11 D/TrackingMensurationPagerFragment(30805): date:30/09 D/FragmentAdapter(30805): getCount: 12 D/FragmentAdapter(30805): getCount: 12 D/FragmentAdapter(30805): getCount: 12 D/FragmentAdapter(30805): getCount: 12 D/FragmentAdapter(30805): getCount: 12 D/FragmentAdapter(30805): getCount: 12 D/FragmentAdapter(30805): getCount: 12 D/FragmentAdapter(30805): getCount: 12 D/FragmentAdapter(30805): getCount: 12 D/FragmentAdapter(30805): getCount: 12

Edit: My while Fragment's xml:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp" >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/mettreAJourTV"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:background="@drawable/btn_vert_degrade_fort"
                android:padding="10dp"
                android:text="@string/maj_caps"
                android:textColor="#FFFFFF" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginRight="10dp"
                android:layout_toLeftOf="@id/mettreAJourTV"
                android:text="@string/mensurations"
                android:textColor="#d33274"
                android:textSize="17dp" />
        </RelativeLayout>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:text="@string/infos_perso_evolution_poids" />

        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

</ScrollView>

Upvotes: 1

Views: 836

Answers (1)

Damien R.
Damien R.

Reputation: 3373

The Problem in my case was that the root element of my Fragment, which is the parent of the ViewPager, was a ScrollView. looks like a ViewPager can't be contained in a ScrollView.

Upvotes: 1

Related Questions