2012-08-16 36 views
3

顯示我打電話ListView.setFooterView(V)頁腳變化不可見的ListView控件通過VIewPager

listView.setFooterView(v) 

,但不變的是可見的。現在我應該補充一點,listView位於添加到ViewPager中的視圖(不是frament)中。

因此,保存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" 
/> 

然後我有三個頁面,每個頁面看起來像這樣的:

<?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的改變來實現|立即可見。

+0

你在ViewPager適配器的instantiateView()中設置了這個嗎? – 2012-08-16 18:35:03

+0

不,我做了一個setCurrentItem(),它設置了適配器等。列表開始加載。我收到一條錯誤消息,並執行setFooterView(),但它不可見。直到我來回切換。 – 2012-08-16 18:40:07

+0

試試我的答案,讓我知道它是否有效,我廣泛使用viewpager,但我懶得查看我的電腦上的代碼。 – 2012-08-16 18:41:46

回答

0

您應該在ViewPager的適配器上調用notifyDataSetChanged()。

+0

我在檢查... – 2012-08-16 20:15:48

+0

仍然沒有顯示。只有在頁面/視圖之間切換才能顯示。 – 2012-08-16 20:46:49

+0

你能不能請你出示你的代碼 – 2012-08-16 20:57:16

18

解決方法是首先添加頁腳視圖,然後設置適配器。如果首先設置了適配器,然後添加了頁腳視圖,則現在顯示出來。但是,removeFooterView(v)可以在不重置適配器的情況下使用。