2012-08-16 52 views
0

首先添加動態按鈕,XML,這是我MainPageViewer:在viewpager

super.onCreate(savedInstanceState); 
setContentView(R.layout.viewpager); 

MyPageAdapter adapter = new MyPageAdapter(); 
ViewPager pager = (ViewPager) findViewById(R.id.pager); 
pager.setAdapter(adapter); 
pager.setCurrentItem(0); 

我PageViewer適配器是在這裏:

public int getCount() 
     { 
      return 3; 
     } 

    public Object instantiateItem(View collection, int position) 
    { 
     LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     int resId = 0; 

     switch(position) 
     { 
      case 0: 
       resId = R.layout.blogandbericht; 
       break; 
      case 1: 
       resId = R.layout.blogandbericht; 
       break; 
      case 2: 
       resId = R.layout.blogandbericht; 
       break; 
     } 

     View view = inflater.inflate(resId, null); 

     ((ViewPager) collection).addView(view, 0); 

     return view; 
    } 

    @Override 
    public void destroyItem(View arg0, int arg1, Object arg2) 
    { 
     ((ViewPager) arg0).removeView((View) arg2); 
    } 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) 
    { 
     return arg0 == ((View) arg1); 
    } 

    @Override 
    public Parcelable saveState() 
    { 
     return null; 
    } 

(是的,我知道,所有的佈局是「bloganbericht 「)

這我blogandbericht:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/masterSv" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#8ad5f0"> 

    <LinearLayout 
     android:id="@+id/masterLl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="foo bar"/> 

    </LinearLayout> 

</ScrollView> 

一切正常。我可以在每個佈局上看到三個按鈕。 但是我怎樣才能像動態地添加視圖像textview或按鈕到佈局?

回答

1

嘛viewpager僅支持每個頁面內1個視圖,所以在適配器修改方法:

public Object instantiateItem(View pager, int position) 

你可以創建這個方法裏面的視圖,並返回它是這樣的:

WebView web = new WebView(mContext); 
return web; 

或者,如果你需要的不僅僅是一個「對象」更復雜的看法,那麼你可以創建一個線性佈局,或類似的東西,往其中加你的其他觀點,並返回像這樣的觀點:

LinearLayout layout = new LinearLayout(mContext); 
WebView web = new WebView(mContext); 
Button btn = new Button(mContext); 
layout.addView(web); 
layout.addView(btn); 
return layout; 

希望它有幫助。

UPDATE:

那麼現在我在做類似的事情,我做,我將添加到viewpager動態的,所以根據物體的類型,我確定什麼將是內部的看法。 我不知道你打算如何確定頁面的外觀,但我會告訴你我是如何做到的。

我有一個「對象」的列表,並且這些對象從一個類擴展(您也可以通過接口和實現來完成,我使用擴展來處理其他原因),並且該類有一個方法「 public View getView()「以及從父類(或實現接口)擴展而來的所有類中,您將覆蓋(實現)該方法,並添加使該」PAGE「看起來像您想要的所需的代碼,然後該適配器只需要您創建的任何類的「對象」列表,並根據哪些類型的每個「對象」來創建傳遞給ViewPager的View。

例:

狗//類或接口方法getView()

-Chihuahua //這個返回的WebView

-Sharpei //這個返回Horizo​​ntalListView

-Huskie //這將返回帶有一串視圖的LinerLayout

在您的適配器上:

public class ViewPagerAdapter extends PagerAdapter { 
    List<Dog> Doggies = new ArrayList<Dog>(); 

    public ViewPagerAdapter(Context context){ 
      Doggies.add(new Chihuahua()); 
      Doggies.add(new Sharpei()); 
      Doggies.add(new Chihuahua()); 
      Doggies.add(new Huskie()); 
      Doggies.add(new Huskie()); 
      Doggies.add(new Chihuahua()); 
      Doggies.add(new Sharpei()); 
    } 

    //and last but not least, on your onCreate method in your adapter: 

    public Object instantiateItem(View pager, int position){ 
      return Doggies.get(position).getView(); 
    } 

    /*THE REST OF THE METHODS GOES AFTER THIS*/ 

} //END OF ADAPTER 
+0

是的,這是有效的。但問題是所有頁面都有相同的線性佈局。我怎麼能說:「添加兩個按鈕到佈局A」和「添加WebView到佈局B」和「添加3個按鈕到佈局c」? – StefMa 2012-08-21 14:33:22

+0

好吧,我已經更新了我的答案,並且如果您可以標記爲答案,對於有同樣問題的任何人都會更好。如果您有其他問題,請告訴我,我會看看我能否幫助您。 – 2012-08-21 15:02:16