Ich habe einen benutzerdefinierten FragmentPagerAdapter, der zwei Fragmente zu einem ViewPager mit entsprechenden Tab-Titeln in einem TabLayout lädt, aber nur ein Fragment wird angezeigt, wenn ich den Code ausführe, aber beide Fragmenttitel erscheinen auf der Registerkarte. Zuerst wurden beide Fragmente nicht angezeigt, dann habe ich meine Gradle-Abhängigkeiten auf v7 23.0.1 für beide unterstützt: appcompat und support: design und meine Kompilierung auf 23. Danach wird nur ein Fragment angezeigt und der Stacktrace ist still . Beide Fragmente sind ListFragments (aus der Support-Bibliothek).ViewPager zeigt nicht alle Fragmente an, die mit FragmentPagerAdapter in TabLayout hinzugefügt wurden
EDIT: erste Fragment wird in der zweiten Fragment Position erscheinen, und Zweiter Teil ist nicht an allen
ViewPagerAdapter angezeigt wird:
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> fragments = new ArrayList<>();
private final List<String> fragmentTitles = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager){super(manager);}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return fragmentTitles.get(position);
}
public void addFragment(Fragment fragment, String title){
fragments.add(fragment);
fragmentTitles.add(title);
}
}
TabbedActivity.java:
public class TabbedActivity extends AppCompatActivity {
Toolbar toolBar;
ViewPager viewPager;
TabLayout tabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tabbed);
toolBar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolBar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
viewPager = (ViewPager) findViewById(R.id.viewpager);
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
//Appearing in 2nd fragment position
adapter.addFragment(new FirstFragment(), "Frag 1");
//Not appearing
adapter.addFragment(new SecondFragment(), "Frag 2");
viewPager.setAdapter(adapter);
tabLayout = (TabLayout) findViewById(R.id.tablayout);
tabLayout.setupWithViewPager(viewPager);
}
}
FirstFragment.java
public class FirstFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {
SimpleCursorAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] from = {"_id", "name"};
int[] to = {R.id.lvtextViewTwo, R.id.lvtextViewOne};
adapter = new SimpleCursorAdapter(getActivity(), R.layout.list_view_layout, null, from, to, 0);
setListAdapter(adapter);
getActivity().getSupportLoaderManager().initLoader(0, null, this);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.first_fragment, container, false);
}
@Override
public void onPause() {
super.onPause();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri uri = DatabaseContentProvider.CUSTOMER_URI;
return new CursorLoader(getActivity(), uri, null, null, null, null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
}
SecondFragment.java:
public class SecondFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor>{
SimpleCursorAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] from = {"_id", "name"};
int[] to = {R.id.lvtextViewTwo, R.id.lvtextViewOne};
adapter = new SimpleCursorAdapter(getActivity(), R.layout.list_view_layout, null, from, to, 0);
setListAdapter(adapter);
getActivity().getSupportLoaderManager().initLoader(0, null, this);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.second_fragment, container, false);
}
@Override
public void onPause() {
super.onPause();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri uri = DatabaseContentProvider.ORDER_URI;
return new CursorLoader(getActivity(), uri, null, null, null, null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
}
PS: Neu bis SO, lass es mich wissen, wenn ich etwas ausgelassen habe.
versucht, funktioniert nicht – BiGGZ
@VernonCliveKawonza Sind Sie sicher, dass Ihr Loader in Second Fragment nicht leeren Datensatz zurückgibt? Wenn Sie leicht zwischen zwei Tabs wischen können, bedeutet dies, dass beide Fragmente vorhanden sind. – Shahzeb
Überprüft das auch. Jedes Fragment in Aktivität gestartet, um sicherzustellen, dass sie ordnungsgemäß funktionieren. Bitte beachten Sie die Änderungen – BiGGZ