2016-07-09 8 views
0

Mein Adapter funktioniert einwandfrei, aber meine Fragmentansichten sind nicht aufgebläht. Meine Haupttätigkeit:ViewPager mit FragmentPagerAdapter

package com.example.rishi.flipper; 
import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
public class MainActivity extends AppCompatActivity { 
private Toolbar toolbar; 
private TabLayout tabLayout; 
private ViewPager viewPager; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    toolbar= (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    viewPager= (ViewPager) findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 
    tabLayout= (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
} 

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter viewpageradapter= new ViewPagerAdapter(getSupportFragmentManager()); 
    viewpageradapter.addFragment(new Fragone(),"One"); 
    viewpageradapter.addFragment(new FragTwo(),"Two"); 
    viewpageradapter.addFragment(FragTwo.newInstance(),"Two"); 
    viewPager.setAdapter(viewpageradapter); 

} 
} 

Die Ressource der Haupttätigkeit: activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout   xmlns:android="http://schemas.android.com/apk/res/android" 

android:layout_width="match_parent" 
android:layout_height="match_parent" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 
<android.support.design.widget.AppBarLayout 
android:layout_height="wrap_content" 
android:layout_width="match_parent" 
> 
<android.support.v7.widget.Toolbar 
    android:layout_width="match_parent" 
    android:id="@+id/toolbar" 
    android:layout_height="?attr/actionBarSize" 
    android:background="@color/colorPrimary" 
    > 
<TextView 
    android:layout_width="wrap_content" 
    android:text="Toolbar" 
    android:height="24sp" 
    android:gravity="center" 
    android:textColor="#FFFFFF" 
    android:layout_height="wrap_content" /> 
</android.support.v7.widget.Toolbar> 
<android.support.design.widget.TabLayout 
    android:layout_width="match_parent" 

    android:layout_height="wrap_content" 
    android:id="@+id/tabs" 
    app:tabGravity="fill" 
    app:tabMode="scrollable" 
    ></android.support.design.widget.TabLayout> 
<android.support.v4.view.ViewPager 
    android:layout_width="match_parent" 
    android:id="@+id/viewpager" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    android:layout_height="wrap_content"> 

</android.support.v4.view.ViewPager> 


</android.support.design.widget.AppBarLayout> 
</android.support.design.widget.CoordinatorLayout> 

Und hier ist mein Adapter:

package com.example.rishi.flipper; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import java.util.ArrayList; 
public class ViewPagerAdapter extends FragmentPagerAdapter { 
ArrayList<Fragment> array=new ArrayList<>(); 
ArrayList<String> title=new ArrayList<>(); 
public ViewPagerAdapter(FragmentManager supportFragmentManager) { 
    super(supportFragmentManager); 
} 

@Override 
public Fragment getItem(int position) { 

    return array.get(position); 
} 

public void addFragment(Fragment fragment, String text) { 
    array.add(fragment); 
    title.add(text); 

} 

@Override 
public int getCount() { 

    return array.size(); 

} 

@Override 
public CharSequence getPageTitle(int position) { 
    return title.get(position); 
} 
} 

ich Layout-inflater mit aufzublasen eine Textansicht im Fragment.

Antwort

0

ViewPager kann nicht wrap_content für seine Höhe, da es nicht die maximale Höhe aller seiner Kinder wissen können, da sie möglicherweise nicht alle zur gleichen Zeit instanziert werden (ViewPager erzeugt und zerstört seine Kinder je nach Bedarf, wenn zwischen den einzelnen Seiten scrollen) . Es ist möglich, das Problem durch Ändern auf match_parent zu beheben.

Es ist auch eine sehr schlechte Idee, eine ArrayList von s zu halten, da dies unvermeidlich zu einem Speicherverlust führen wird. Das beabsichtigte Verhalten für ViewPager ist, dass Sie die Fragmente in getItem instanziieren, wie sie benötigt werden.

Wenn nach diesen beiden Änderungen immer noch nichts aufgebläht wird, liegt das Problem wahrscheinlich im onCreateView Code Ihrer Fragmente.

Verwandte Themen