ViewPager mit mehreren Fragmentinstanzen derselben Klasse

Ich versuche, einen ViewPager zu erstellen, der 5 Fragmente enthält. 5 Fragmente "Container", so dass jedes von ihnen 2 Fragmente enthält. Die 4 ersten Fragmente haben das gleiche Layout und gehören zur gleichen Klasse. Der fünfte stammt aus einer anderen Klasse, und damit gibt es kein Problem.

Das Problem ist, dass beim Start der Aktivität nur 1 Fragment zu funktionieren scheint (das auf Position 0 in viewPager). Ich habe versucht, neues Fragment () an Position 0 in meinem PagerAdapter zurückzugeben, aber wenn ich das tue, ist es das 2. Fragment, das funktioniert. (Wenn ich arbeite, meine ich, die Liste auf der linken Seite anzuzeigen, habe ich mich immer noch nicht um das Detailfragment auf der rechten Seite gekümmert.)

Hier ist ein Code

CustomPagerAdapter.java

public class CustomPagerAdapter extends FragmentPagerAdapter{

public CustomPagerAdapter(FragmentManager fm) {
    super(fm);
}
public CustomPagerAdapter(FragmentManager fm, Context context) {
    super(fm);

}

@Override   
public Fragment getItem(int pos) {

    if(pos == 4)
        return new OtherContainerFragment();
    else
        return new ContainerFragment(pos);

}

@Override
public int getCount() {

    return 5;
}

ContainerFragment.java

public class ContainerFragment extends Fragment {
private int CONTAINER_TYPE;

public ContainerFragment(){

}

public ContainerFragment(int type){
    CONTAINER_TYPE = type;
}



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


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

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);


    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
    CustomListFragment frag = new CustomListFragment(CONTAINER_TYPE);

    ft.replace(R.id.replaceable_list, frag);

    ft.commit();

CustomListFragment.java

public class CustomListFragment extends SuperCustomListFragment{

private ArrayList<Model> mModels;
private int TYPE;


public CustomListFragment(){

}

public CustomListFragment(int type){
    TYPE = type;
}


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


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return super.onCreateView(inflater, container, savedInstanceState);
}


@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    mModels = new ArrayList<Model>();


     if(TYPE == AppConstants.FRAGMENT_TYPE_JOURNAL){
        mAdapter = AppUtils.getJournalListAdapter(getActivity(), mModels);
        new syncPapers().execute();
     }else if(TYPE == AppConstants.FRAGMENT_TYPE_MOVIES){
         mAdapter = AppUtils.getMoviesListAdapter(getActivity(), mModels);
         new syncMovies().execute();
     }


    if(mAdapter != null)
        mListView.setAdapter(mAdapter);  //mListView is defined in the superClass 

Hier sind die Konstanten, die ich benutze:

public class AppConstants {


public static final int FRAGMENT_TYPE_AGENDA = 0; //so Fragment at position 0 should be of type agenda
public static final int FRAGMENT_TYPE_NEWS = 1; // position 1 should be of type news
public static final int FRAGMENT_TYPE_MOVIES = 2; // ...
public static final int FRAGMENT_TYPE_JOURNAL = 3; // ...

}

Und die XML für den Container:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

<LinearLayout
    android:id="@+id/replaceable_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</LinearLayout>

<LinearLayout
    android:id="@+id/replaceable_details"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="@drawable/background" >
</LinearLayout>

</LinearLayout>

SO funktioniert dieser Code nicht, es scheint, dass die Liste links im Fragmentcontainer in jedem Fragment ersetzt wird, und nur das Fragment an Position 0 zeigt es an. (Derzeit wird die Liste mit dem Adapter vom Typ "JOURNAL" angezeigt, es sollte jedoch eine Liste vom Typ "AGENDA" angezeigt werden.

-------------------- *ABER !...* --------------------

Wenn ich verschiedene fragment_container-Layoutdateien erstelle und IF-Bedingungen in die Datei onCreateView und onViewCreated in die Datei ContainerFragment.java schreibe, funktioniert alles einwandfrei. So :

ContainerFragment.java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle      savedInstanceState) {
if(CONTAINER_TYPE == AppConstants.FRAGMENT_TYPE_JOURNAL)
    return inflater.inflate(R.layout.fragment_container_journal, container, false);
else if(CONTAINER_TYPE == AppConstants.FRAGMENT_TYPE_MOVIES)
    return inflater.inflater(R.layout.fragment_container_movies, container, false);
else
    return super.onCreateView(LayoutInflater inflater, ViewGroup container, Bundle      savedInstanceState);
}


@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);


    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
    CustomListFragment frag = new CustomListFragment(CONTAINER_TYPE);

    if(CONTAINER_TYPE == AppConstants.FRAGMENT_TYPE_JOURNAL)
        ft.replace(R.id.replaceable_journal_list, frag);
    else if(CONTAINER_TYPE == AppConstants.FRAGMENT_TYPE_MOVIES)
        ft.replace(R.id.replaceable_movies_list, frag);
    else 
        return;

    ft.commit();

Ich denke, das liegt daran, dass ich in jedem Fragment das LinearLayout mit derselben ID ersetze. (replaceable_list) Ich dachte, es sei möglich, für jedes Fragment die gleiche Layoutdatei zu verwenden und wollte keine 4 Layoutdateien erstellen, die gleich wären. Aber es sieht so aus, als müsste ich das tun? Oder fehle ich hier etwas?

Vielen Dank für Ihre Zeit,

Antworten auf die Frage(2)

Ihre Antwort auf die Frage