2013-04-26 17 views
10

Android'in yeni bir Android uygulaması başlattığınızda başlaması gereken varsayılan kaydırma sekmesi parçası kodunu kullanıyorum. Verilerimi nasıl değiştireceğimi ve sekmeleri nasıl kullanacağımı anladım, ancak orada bulunanlara nasıl basit bir parça ekleyeceğimi anlayamadım. Sekmelerin üstünde veya sağ alt kısmında bir bilgi çubuğu eklemek istedim. Eminim basit, sadece nasıl lol anlayamıyorum. Örneklerle öğreniyorum.ViewPager'a nasıl parça ekleyebilirim? addView benim app çöküyor

Viewpager'a bir görünüm eklemeyi denedim, ancak uygulamanız çöküyor ve tamamen yanlış yaptığımı düşünüyorum. Benim MainActivity olarak

: ...

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Set up the action bar. 
    final ActionBar actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    mSectionsPagerAdapter = new SectionsPagerAdapter(
      getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
    SubBarFragment infobar = new SubBarFragment(); 
    mViewPager.addView(infobar.getView());  
.....[extra code for menus and things] 

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

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

    @Override 
    public Fragment getItem(int position) { 
....[code to show specific tabs and return the tab's fragment] 

infobarfragment.java

public class InfobarFragment extends Fragment { 

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

} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" /> 

infobar.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="horizontal" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_wifi" /> 

    <TextView 
     android:id="@+id/statusText1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="Wifi Status Information" /> 

</LinearLayout> 
+0

ViewPager için bir bağdaştırıcınız var, getItem/instanciateItem yöntemini kullanın (kullandığınız şeye bağlıdır: fragmanlar veya basit görünümler). Bu yöntem, viewpager nesnesine gereken tüm görünümleri verir. – Andreas

+0

Bağdaştırıcıda birden fazla parçayı döndürebilir misiniz? Santhosh'un yardımını kullanarak nasıl parça ekleyeceğimi düşündüm, ama sadece bunu kaydırabileceğiniz başka bir 'sayfa' olarak değerlendiriyor. Hangi sayfada olduğum önemli değil, kalıcı olmasını istiyorum. Sekmelerin üstünde olmasını istedim, ama bunun mümkün olduğunu düşünmüyorum. Bu yüzden sekmelerden aşağıda olması sanırım iyidir. Düşünceler? – CREW

cevap

14

Bu yaklaşımı takip edebilirsiniz:

Sadece bir çağrı cihazındaki her görünüm için parçaları kullanın.

FragmentActivity'un onCreate() yönteminde aşağıdaki kodu yazın.

List<Fragment> fragments = new Vector<Fragment>(); 

//for each fragment you want to add to the pager 
Bundle page = new Bundle(); 
page.putString("url", url); 
fragments.add(Fragment.instantiate(this,MyFragment.class.getName(),page)); 

//after adding all the fragments write the below lines 

this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments); 

mPager.setAdapter(this.mPagerAdapter); 

bir numune parçası tanımı:

public class MyFragment extends Fragment { 


public static MyFragment newInstance(String imageUrl) { 

final MyFragment mf = new MyFragment(); 

    final Bundle args = new Bundle(); 
    args.putString("somedata", "somedata"); 
    mf.setArguments(args); 

    return mf; 
} 

public MyFragment() {} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    String data = getArguments().getString("somedata"); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // Inflate and locate the main ImageView 
    final View v = inflater.inflate(R.layout.my_fragment_view, container, false); 
    //... 
    return v; 
} 

FragmentPagerAdapter

public class MyFragmentAdapter extends FragmentPagerAdapter { 

public static int pos = 0; 

private List<Fragment> myFragments; 

public MyFragmentAdapter(FragmentManager fm, List<Fragment> myFrags) { 
    super(fm); 
    myFragments = myFrags; 
} 

@Override 
public Fragment getItem(int position) { 

    return myFragments.get(position); 

} 

@Override 
public int getCount() { 

    return myFragments.size(); 
} 

@Override 
public CharSequence getPageTitle(int position) { 

    setPos(position); 

    String PageTitle = ""; 

    switch(pos) 
    { 
     case 0: 
       PageTitle = "page 1"; 
       break; 
     case 1: 
       PageTitle = "page 2"; 
       break; 
     case 2: 
       PageTitle = "page 3"; 
       break; 
     case 3: 
       PageTitle = "page 4"; 
       break; 
     case 4: 
       PageTitle = "page 5"; 
       break; 
     case 5: 
       PageTitle = "page 6"; 
       break; 
     case 6: 
       PageTitle = "page 7"; 
       break; 
    } 
    return PageTitle; 
} 

public static int getPos() { 
    return pos; 
} 

public static void setPos(int pos) { 
    MyFragmentAdapter.pos = pos; 
} 
} 
+0

Merhaba Santhosh. Bu, benim mevcut adaptörüme nasıl bir parça eklemenin daha kolay olduğunu anlamama yardımcı oluyor! Bir fragman ekleyebilirim, ancak bu parçayı başka bir sayfa gibi ekleyebileceğim parçamı değiştirebilirim. Farklı bir sekmeye kaydırırsam hangi sayfanın kaydırıldığına bakılmaksızın üstte veya altta kalmak için eklediğim 'statusbar' parçamı istiyorum. Özünde, statusbar bir sub-actionbar gibidir. Sadece bana neyin olup bittiğini öğrenmesini sağla. Stratejimi yeniden çalıştırmam gerekir mi? – CREW

+0

Parçalar, Görüntüleyici'ye eklenir. En üstte fragment_container parçasına sahip fragman aktivitesi için bir düzen (lineerlayout [vertical]] ve daha sonra onun altındaki viewpager'ı oluşturabileceğinizi düşünüyorum. – SKK

İlgili konular