2016-06-06 7 views
0

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.

Antwort

0

Ich entdeckte das Problem getActivity().getSupportLoaderManager().initLoader(0, null, this); mit dem gleichen ID(0) von beiden rief Fragments. Lösung war, jedem initLoader Anruf eine eindeutige ID zu geben.

0

Bestücken Sie Ihre List von Fragments innerhalb FragmentPagerAdapter oder vorausgefüllt passieren List durch constructor zum adapter

public ViewPagerAdapter(FragmentManager manager) 
{ 
    super(manager); 

//Title 'Frag 1' shows, but not actual fragment 
    addFragment(new FirstFragment(), "Frag 1"); 

    //Both title and fragment show 
    addFragment(new SecondFragment(), "Frag 2"); 


} 

ODER

public ViewPagerAdapter(FragmentManager manager, List<Fragment> fragments) 
{ 
    super(manager); 
    this.fragments = fragments; 
} 
+0

versucht, funktioniert nicht – BiGGZ

+0

@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

+0

Überprüft das auch. Jedes Fragment in Aktivität gestartet, um sicherzustellen, dass sie ordnungsgemäß funktionieren. Bitte beachten Sie die Änderungen – BiGGZ

Verwandte Themen