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」であることはわかっています)

そして、これは私のブログとベリヒト:

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

すべて正常に動作します。各レイアウトに 3 つのボタンが表示されます。しかし、テキストビューやボタンなどのビューをレイアウトに動的に追加するにはどうすればよいですか?

4

1 に答える 1

1

ビューページャーは各ページ内で 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;

それが役に立てば幸い。

アップデート:

さて、今私は似たようなことをしています。ビューページャーに追加するビューを動的にするので、オブジェクトのタイプに応じて、内部にあるものを決定します。ページがどのように表示されなければならないかをどのように決定する予定かはわかりませんが、どのようにそれを行うかを説明します.

私は「オブジェクト」のリストを持っており、それらのオブジェクトはクラスから拡張されています(インターフェイスと実装でも実行できます。他の理由で拡張を使用して実行します)。そのクラスには「public View getView( )」および父クラスから拡張された (またはインターフェイスを実装した) すべてのクラスで、メソッドをオーバーライド (実装) し、その「ページ」を希望どおりに見せるために必要なコードを追加します。作成したクラスの「オブジェクト」のリストが必要であり、これらの各「オブジェクト」のタイプに応じて、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 に答える