在viewpager中向xml添加动态按钮

时间:2012-08-16 15:29:53

标签: android android-viewpager

首先,这是我的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”)

这是我的博客和网友:

<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>

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

1 个答案:

答案 0 :(得分: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查看getView()“以及从父类(或实现接口)扩展的所有类中,覆盖(实现)方法并添加使”PAGE“看起来像你想要的所需的代码,然后在适配器您只需要拥有您创建的任何类的“对象”列表,并根据每个“对象”的类型创建传递给ViewPager的视图。

示例:

Dog // CLASS OR INTERFACE WITH METHOD 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