2016-08-29 5 views
2

Ich habe eine ViewPager, der ich Fragmente hinzufügen möchte. Der ViewPager wird auf dem Bildschirm korrekt angezeigt, enthält jedoch leider keinen Inhalt.Fragment in ViewPager nicht sichtbar

Ich habe den Vorschlag in einigen posts gesehen

getChildFragmentManager() 

getSupportFragmentManager() 

mit

zu ersetzen, aber ich brauche die ActionBar. Leider ist die ChildFragmentmanager nicht in der AppCompatActivity verfügbar.

Während des Debuggens habe ich festgestellt, dass die Methode des Fragments onCreateView() aufgerufen wird und es ein Layout zurückgibt.

Frage: Wie kann ich die Fragments sichtbar machen? Und war der Hauptunterschied von meinem Code zu diesem sample?

Aktivität:

public class ViewPagerActivity extends AppCompatActivity { 

    private ViewPager mViewPager; 

    private List<Location> locationList = new ArrayList<>(); 
    private locationsBaseHandler db; 
    private CustomPagerAdapter mAdapter; 

    private Location mLocation; 

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

     setContentView(R.layout.activity_viewpager); 

     locationList.add(someData); 

     mViewPager = (ViewPager) findViewById(R.id.viewpager); 
     mAdapter = new CustomPagerAdapter(this, getSupportFragmentManager(), locationList); 

     mViewPager.setAdapter(mAdapter); 

    } 

} 

Pager-Adapter:

public class CustomPagerAdapter extends FragmentPagerAdapter { 

    private Context mContext; 
    private List<Location> locationList = new ArrayList<>(); 

    public CustomPagerAdapter(Context mContext, FragmentManager fm, List<Location> locationList) { 
     super(fm); 

     this.locationList.addAll(locationList); 
     this.mContext = mContext; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return LocationFragment.newInstance(position); 
    } 

    @Override 
    public int getCount() { 
     return 5; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return false; 
    } 
} 

Fragment:

public class LocationFragment extends Fragment { 
    private static final String ARG_LAYOUT_ID = "page_number"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View layout = inflater.inflate(R.layout.fragment_location, container, false); 

     return layout; 
    } 

    public static LocationFragment newInstance(int selectedIdForIndex) { 
     LocationFragment fragment = new LocationFragment(); 

     Bundle args = new Bundle(); 
     args.putInt(ARG_LAYOUT_ID, selectedIdForIndex); 
     fragment.setArguments(args); 

     return fragment; 
    } 

    public int getPageNumber() { 
     return getArguments().getInt(ARG_LAYOUT_ID); 
    } 
} 

Antwort

2

Versuchen Sie, die Methode isViewFromObject in CustomPagerAdapter zu entfernen.

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return false; 
} 

Wir können diesen Kommentar isViewFromObject sehen:

Legt fest, ob eine Seite Darstellung mit einem bestimmten Schlüsselobjekt als zurück durch {@link #instantiateItem (Viewgroup, int)} zugeordnet ist. Diese Methode ist erforderlich, damit ein PagerAdapter ordnungsgemäß funktioniert.

Verwandte Themen