ListView.setFooterView(v)页脚更改不可见在VIewPager显示的ListView中

Cod*_*oid 3 android android-layout

我打电话

listView.setFooterView(v)
Run Code Online (Sandbox Code Playgroud)

但没有看到任何变化.现在我应该补充一点,listView位于一个添加到ViewPager中的视图(不是一个框架)中.

因此,包含listView的View位于视图分页器内.如果我在视图之间来回切换,那么我会看到更改,但不是.到目前为止,我已经尝试使包括整个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"
/>
Run Code Online (Sandbox Code Playgroud)

然后我有三个页面,每个看起来像这样:

 <?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>
Run Code Online (Sandbox Code Playgroud)

所以我有上面的观点,并立即在主要活动的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) {


    }


}
Run Code Online (Sandbox Code Playgroud)

我会更新几行......

     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();
}
Run Code Online (Sandbox Code Playgroud)

所以我想要改变addFooterView的影响 立即可见.

Cod*_*oid 18

解决方法是首先添加页脚视图,然后设置适配器.如果首先设置适配器然后添加页脚视图,它现在会显示.但是,可以在不重置适配器的情况下使用removeFooterView(v).