3

電話する

listView.setFooterView(v)

しかし、変化は見られません。ここで、listViewがViewPagerに追加されたビュー(フレーマンではなく)内にあることを追加する必要があります。

したがって、listViewを保持するビューはビューページャー内にあります。ビューを行ったり来たりすると、変化が見られますが、そうでない場合は見られません。これまで、ViewPager全体を含むほとんどすべてを無効にしようとしましたが、それでも表示されません。

私が持っている活動レイアウトの内部:

 <android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:layout_weight="1"
/>

次に、それぞれ3つのページが次のようになります。

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/listListDisplayer1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
    android:id="@+id/listMyList1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:cacheColorHint="#00000000"
    android:fastScrollEnabled="true" />

<include layout="@layout/advertisement" />

</FrameLayout>

したがって、上記のようなビューがあり、メインアクティビティのonCreate()ですぐに作成します。

 MyPageAdapter extends ViewPagerAdapter{

      int getCount() {
           return 3;
      }

       public Object instantiateItem(View collection, int position) {

        View view=null;

        switch (position) {
            case 0:
                view = getMyView1();
                break;
            case 1:
                view = getMyView2();
                break;
            case 2:
                view = getMyView2();
                break;
        }

        if ((view != null) && ((ViewPager) collection).findViewById(view.getId()) == null)
        {

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

        return view;
    }


    private View getMyView1()
    {   
        return mMyView1;
    }


    private View getMyView2()
    {
        return  mMyView2;
    }



    private View getMyView3()
    {
        return mMyView3;
    }


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

    }

    @Override
    public void finishUpdate(View view) {


    }

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

    }

    @Override
    public void restoreState(Parcelable parcel, ClassLoader classLoader) {
    }

    @Override
    public Parcelable saveState() {

        return null;
    }

    @Override
    public void startUpdate(View view) {


    }


}

さらに数行で更新します...。

     private class PageChangeListener implements OnPageChangeListener {

    @Override
    public void onPageScrollStateChanged(int scrollState) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageSelected(int pageNum) {
        Logout.debug("pageSelected :"+pageNum); 
        if (pageNum == 0)
        {
            prepareMyView1();
        }
        else if (pageNum == 2)
        {
           prepareMyView2();
        }
        else if (pageNum == 3)
        {
            prepareMyView3();
        }
    }

}

    private void prepareMyView1()   // each is like this setting adapter on ListView
{   
    setMyList1Adapter();
}

     private void prepareMyView2()   // each is like this setting adapter on ListView
{   
    setMyList2Adapter();
}

だから私はaddFooterViewの変更を有効にしたい| すぐに表示されます。

4

2 に答える 2

18

これに対する解決策は、最初にフッタービューを追加してから、アダプターを設定することです。アダプターを最初に設定してからフッタービューを追加すると、アダプターが表示されるようになります。ただし、removeFooterView(v)は、アダプターをリセットせずに使用できます。

于 2012-08-17T21:13:07.267 に答える
0

ViewPager のアダプターで notifyDataSetChanged() を呼び出す必要があります。

于 2012-08-16T18:35:35.930 に答える