0

首先,这是我的 MainPageViewer:

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>

一切正常。我可以看到每个布局上的三个按钮。但是我怎样才能动态地将文本视图或按钮等视图添加到布局中呢?

4

1 回答 1

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;

希望能帮助到你。

更新:

好吧,现在我正在做类似的事情,我将添加到 viewpager 的视图设为动态的,因此根据对象的类型,我确定里面的内容。我不知道您打算如何确定页面的外观,但我会告诉您我是如何做到的。

我有一个“对象”列表,这些对象从一个类扩展(您也可以使用接口和实现,我出于其他原因使用扩展),并且该类有一个方法“public View getView( )”,并且在从父类(或实现接口)扩展的所有类中,您覆盖(实现)该方法并添加必要的代码以使“PAGE”看起来像您想要的那样,然后在适配器上您只需要有一个您创建的任何类的“对象”列表,并且根据每个“对象”的类型,它们将创建传递给 ViewPager 的视图。

例子:

Dog //类或接口与方法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
于 2012-08-20T23:00:34.000 回答