SORU
23 AĞUSTOS 2013, Cuma


Nasıl farklı Parçaları / Düzenleri ile bir ViewPager uygulamak

Viewpager uygulayan bir etkinlik başlattığınızda, viewpager çeşitli parçaları yarattı. Her parça için farklı düzenleri kullanmak istiyorum, ama sorun viewpager max sadece iki düzenleri (1 sonra geri kalan parçaların hepsi ikinci düzen) gösterir.

İşte koduSwipeActivitybu viewpager uygulayan :

public class SwipeActivity extends FragmentActivity
{

    MyPageAdapter pageAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_swipe);
        pageAdapter = new MyPageAdapter(getSupportFragmentManager());
        ViewPager pager=(ViewPager)findViewById(R.id.pager);
        pager.setAdapter(pageAdapter);
        ActionBar bar = getActionBar();
        bar.setDisplayHomeAsUpEnabled(true);
    }
    /**
    * Custom Page adapter
    */
    private class MyPageAdapter extends FragmentPagerAdapter
    {
        public MyPageAdapter(FragmentManager fm)
        {
            super(fm);
        }
        @Override
        public int getCount()
        {
            return 5;
        }
        @Override
        public Fragment getItem(int position)
        {
            switch(position)
            {
                case 0: return new MyFragment();
                case 1: return SecondFragment.newInstance("asdasd");
                default : return RamFragment.newInstance("s");
            }
        }
     }
}

İşte koduparçaları

public class MyFragment extends Fragment
{
   @Override
   public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup,    Bundle paramBundle)
   {
     return paramLayoutInflater.inflate(R.layout.processorlayout, paramViewGroup, false);
   }
}

Böyle 5 parçaları, tüm farklı düzenleri olmasına alışmıştım, ama viewpager max sadece 2 gösterir.

EDİT: SecondFragment kodu

public class SecondFragment extends Fragment
{
   public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";

  public static final SecondFragment newInstance(String paramString)
  {
    SecondFragment f = new SecondFragment();
    Bundle localBundle = new Bundle(1);
    localBundle.putString("EXTRA_MESSAGE", paramString);
    f.setArguments(localBundle);
    return f;
  }

 @Override
 public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle)
 {
    return paramLayoutInflater.inflate(R.layout.motherboardlayout, paramViewGroup, false);
 }

}

CEVAP
23 AĞUSTOS 2013, Cuma


Bu çok sık sorulan bir soru olduğu için, ve birden çok Parçaları ve Düzenleri ile ViewPager açıklamak için zaman ve çaba almak için detay istedim. Al bakalım.

Nasıl çoklu Parçaları ve Düzeni dosyaları ile ViewPager -

Aşağıdaki bir ViewPager nasıl tam bir örnek. parça Türleri ve farklı düzeni dosyaları farklı.

Bu durumda, 3 Parça sınıfları var, ve farklı bir düzen her sınıf için bir dosya.Şeyleri basit tutmak içinparça-düzenleri sadece arka plan rengi farklı. Tabii ki, düzen-dosya Parçaları için kullanılabilir.

FirstFragment.java bir vardırturuncuarka plan düzeni, SecondFragment.java bir vardıryeşilarka plan düzeni ve ThirdFragment.java bir vardırkırmızıarka plan düzeni. Ayrıca, her Parça farklı bir metin, bu ve buna bağlı olarak görüntüler.

Ayrıca ben farkında kullanarak destek kitaplığı bölümleri: android.destek.v4.app.Parça

MainActivity.java(Viewpager başlatır ve adaptörü vardır bir iç sınıf olarak). Tekrar bir bakithalat. android.support.v4 paket kullanıyorum.

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 MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);     

        ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
        pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
    }

    private class MyPagerAdapter extends FragmentPagerAdapter {

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

        @Override
        public Fragment getItem(int pos) {
            switch(pos) {

            case 0: return FirstFragment.newInstance("FirstFragment, Instance 1");
            case 1: return SecondFragment.newInstance("SecondFragment, Instance 1");
            case 2: return ThirdFragment.newInstance("ThirdFragment, Instance 1");
            case 3: return ThirdFragment.newInstance("ThirdFragment, Instance 2");
            case 4: return ThirdFragment.newInstance("ThirdFragment, Instance 3");
            default: return ThirdFragment.newInstance("ThirdFragment, Default");
            }
        }

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

activity_main.xml(MainActivitys .dosya xml) - basit düzeni dosyası, tüm ekranı doldurur ViewPager içeren sadece.

<android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@ id/viewPager"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />

Parça sınıfları,FirstFragment.java ithalat android.destek.v4.app.Fragman;

public class FirstFragment extends Fragment {

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

        TextView tv = (TextView) v.findViewById(R.id.tvFragFirst);
        tv.setText(getArguments().getString("msg"));

        return v;
    }

    public static FirstFragment newInstance(String text) {

        FirstFragment f = new FirstFragment();
        Bundle b = new Bundle();
        b.putString("msg", text);

        f.setArguments(b);

        return f;
    }
}

first_frag.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_orange_dark" >

    <TextView
        android:id="@ id/tvFragFirst"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textSize="26dp"
        android:text="TextView" />
</RelativeLayout>

SecondFragment.java

public class SecondFragment extends Fragment {

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

    TextView tv = (TextView) v.findViewById(R.id.tvFragSecond);
    tv.setText(getArguments().getString("msg"));

    return v;
}

public static SecondFragment newInstance(String text) {

    SecondFragment f = new SecondFragment();
    Bundle b = new Bundle();
    b.putString("msg", text);

    f.setArguments(b);

    return f;
}
}

second_frag.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_green_dark" >

    <TextView
        android:id="@ id/tvFragSecond"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textSize="26dp"
        android:text="TextView" />

</RelativeLayout>

ThirdFragment.java

public class ThirdFragment extends Fragment {

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

    TextView tv = (TextView) v.findViewById(R.id.tvFragThird);      
    tv.setText(getArguments().getString("msg"));

    return v;
}

public static ThirdFragment newInstance(String text) {

    ThirdFragment f = new ThirdFragment();
    Bundle b = new Bundle();
    b.putString("msg", text);

    f.setArguments(b);

    return f;
}
}

third_frag.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_red_light" >

    <TextView
        android:id="@ id/tvFragThird"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textSize="26dp"
        android:text="TextView" />

</RelativeLayout>

Sonuç şudur:

Bu Viewpager tutar 5 Parçaları, Parçaları 1. türü FirstFragment ve görüntüler first_frag.xml düzen, Fragmanı 2 tip SecondFragment ve görüntüler second_frag.xml ve 3-5 Parça var tipi ThirdFragment ve tüm görüntü third_frag.xml.

enter image description here

Sola veya sağa kaydırın üzerinden açılabilir arasında 5 Parçaları görebilirsiniz yukarıda. Sadece bir Parçası, tabii ki, aynı anda görüntülenebilir.

Son ama en az değil:

Bir kullanmanızı tavsiye ederimboş yapıcısenin her Parça sınıfları.

Yapıcı yoluyla potansiyel parametreleri teslim yerine, newInstance(...) yöntemi ve parametreleri teslim Bundle kullanın.

Bu şekilde, eğer müstakil ve re-bağlı nesne durumu bağımsız değişkenleri ile saklanabilir. Bundles Intents bağlı gibi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alan Fullmer

    Alan Fullmer

    3 EYLÜL 2010
  • kylediablo

    kylediablo

    8 Ocak 2007
  • pissengehen

    pissengehen

    26 EYLÜL 2006