2012-04-16 28 views
10

Soy un principiante desarrollador de Android. Estoy tratando de entender mi ViewPager. Antes de que yo estaba tratando de trabajar con este ejemplo:Trabajando con ViewPager y Fragmentos

http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/

que tenían los puntos de vista de trabajo, pero no pudo conseguir la funcionalidad de trabajo dentro de ella, y me dijeron que necesito utilizar fragmentos dentro del ViewPager.

Fui con este tutorial en su lugar:

http://tamsler.blogspot.co.uk/2011/11/android-viewpager-and-fragments-part-ii.html

tengo los fundamentos de un ViewPager con un trabajo Fragmento:

FragmentPagerActivity.java

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 

public class FragmentPagerActivity extends FragmentActivity { 

    private static final int NUMBER_OF_PAGES = 10; 

    private ViewPager mViewPager; 
    private MyFragmentPagerAdapter mMyFragmentPagerAdapter; 

    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     mViewPager = (ViewPager) findViewById(R.id.viewpager); 
     mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager()); 
     mViewPager.setAdapter(mMyFragmentPagerAdapter); 
    } 

    private static class MyFragmentPagerAdapter extends FragmentPagerAdapter { 

     public MyFragmentPagerAdapter(FragmentManager fm) { 
       super(fm); 
     } 

     @Override 
     public Fragment getItem(int index) { 

       return PageFragment.newInstance("My Message " + index); 
     } 

     @Override 
     public int getCount() { 

       return NUMBER_OF_PAGES; 
     } 
    } 
} 

PageFragment.java :

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class PageFragment extends Fragment { 

    public static PageFragment newInstance(String title) { 

     PageFragment pageFragment = new PageFragment(); 
     Bundle bundle = new Bundle(); 
     bundle.putString("title", title); 
     pageFragment.setArguments(bundle); 
     return pageFragment; 
    } 

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment, container, false); 
     TextView textView = (TextView) view.findViewById(R.id.textView1); 
     textView.setText(getArguments().getString("title")); 
     return view; 
    } 
} 

main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
<android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

</LinearLayout> 

fragment.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextView" /> 

</LinearLayout> 

Quiero ser capaz de reemplazar el diseño actual dentro de la ViewPager con 7 de mis propios diseños ya existentes y añadir funcionalidad a los diseños usando Fragmentos. ¿Qué puedo hacer con el código que ya tengo y los cambios que debo hacer para que funcione correctamente?

Si hay ejemplos de un ViewPager con Fragmentos disponibles en línea, en lugar de limitarme brevemente a hacerlo, como lo hago en el blog de Adroid Developers, estaré muy agradecido.

Respuesta

11

Suponiendo que usted sabe cómo crear fragmentos de sí mismos, sólo que algo como esto para conseguir que en su opinión localizador:

 @Override 
     public Fragment getItem(int page) { 
      switch (page) { 
       case 0: return new MyFirstFragment(); 
       case 1: return new MySecondFragment(); 
       case 2: return new MyThirdFragment(); 
       //and so on.... 
      } 
      return null; 
     } 

     @Override 
     public int getCount() { 
      return [the count of total fragments]; 
     } 

en lugar de esto:

 @Override 
    public Fragment getItem(int index) { 
      return PageFragment.newInstance("My Message " + index); 
    } 
+0

Muchas gracias por la ayuda, voy a intentarlo y le haré saber si puedo hacerlo funcionar. – kibria3

12

nuevas de esto dentro de su MyFragmentPagerAdapter:

private Fragment[] fragments = new Fragment[] { new Fragment1(),Fragment2(),Fragment3(),Fragment4(),Fragment5()}; 

luego implemente el método getItem de la siguiente manera:

@Override 
     public Fragment getItem(int index) { 

       return fragments[index]; 
     } 

y para cada fragmento tiene es propia clase y el diseño:

public class Fragment1 extends Fragment { 
    //your code here 
} 
+0

Muchas gracias por la ayuda, voy a intentarlo y le haré saber si funciona. – kibria3

2

he modificado la respuesta de hambonious un poco:

nuevas de esto dentro de su MyFragmentPagerAdapter:

private SparseArray<Fragment> fragments = new SparseArray<Fragment>();

luego implemente el método getItem de la siguiente manera:

@Override 
public Fragment getItem(int index) { 
    if(fragments != null && fragments.size() >= index) 
     return fragments.get(i); 
    else return null; 
} 

también hay que anular getSize()

@Override 
public int getCount() { 
    return fragments.size(); 
} 

continuación, puede agregar dinámico y eliminar los fragmentos de ella.

Cuestiones relacionadas