2014-03-01 42 views
0

好日子所有加載相同的背景圖像片段,我有一個小問題,我似乎無法讓我的頭周圍。我有一個3片段的ViewPager,這個ViewPager包含在一個FrameLayout中。我想要做的是爲每個片段,FrameLayout變化的背景圖像。ViewPager

我FragmentActivity是:

pagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), fragments); 
pager = (ViewPager)findViewById(R.id.viewpager); 
pager.setAdapter(pagerAdapter); 

在我MyPagerAdapter,我實例中爲getItem片段()方法:

@Override 
public Fragment getItem(int position) {  
    return MyFragment.newInstance(position); 

} 

現在,我可以設置爲在片段的視圖中的值正確使用位置

public static MyFragment newInstance(int position){ //Add arraylist of hashmaps to populate it here. 
     MyFragment my_fragment = new MyFragment(); 

     Bundle bundle = my_fragment.getArguments(); 
     if(bundle == null){ 
      bundle = new Bundle(); 
     } 
     bundle.putInt(FRAGMENT_POSITION, position); 

     my_fragment.setArguments(bundle); 
     return my_fragment; 
    } 




    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     Bundle args = getArguments(); 
     if(args != null){ 
      position = args.getInt(FRAGMENT_POSITION); 
     } 

     //do other operations and Methods on views based on position. 

然後在某個點,我調用一個方法`((我的FragmentActivity)getActivity())。setLayoutBackground(resId)在容器Activity中設置FrameLayout的背景。我的麻煩是,我似乎無法區分哪個片段被調用,因爲ViewPagers將所有片段加載在一起,並且我一直獲得ViewPager中所有片段的相同背景。

在MyFragmentActivity中,我試着在PageChangeListener中改變它,但沒有運氣,我注意到我一直都在傳遞相同的值,所以不斷得到同樣的結果。

public void setLayoutBackground(int resId){ 

     layoutResId = resId; 

     pager.setOnPageChangeListener(new OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int pos) { 
       app.setBackground(layout, layoutResId) 
       //Log.d(TAG, "i am resId" + layoutResId); 
      } 

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

      } 

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

      } 
     }); 
    } 

什麼,我需要做的是片段的位置傳遞給FragmentActivity,使其加載正確的背景,但似乎無法推測出來。 (背景繪製負載是基於一個邏輯,所以我不能從一開始就定義的話)任何想法如何,我可以去這還是什麼我可以做錯誤的,因爲它迄今已處理了我的週末..: ) 提前謝謝了。

+0

在'newInstance'沒有得到需要的參數,並檢查它們是否爲空。他們總是會在一個新的Fragment實例上,所以剛剛開始一個新的Bundle(),並且刪除了一些樣板代碼。 – SDJMcHattie

回答

0

與其讓片段直接設置佈局背景的,具有活性的HashMap<Integer, Integer> fragmentBackgrounds;場變量和替換((MyFragmentActivity)getActivity()).setFragmentBackground(position, resId)方法調用到((MyFragmentActivity)getActivity()).setLayoutBackground(resId)其中活動,則使渣油進fragmentBackgrounds地圖用鑰匙表示位置和代表resId的值。在PageChangeListener的onPageSelected()方法,使用它可以讓你查找的資源在你的圖,該片段想和設置佈局背景在那個時候(除非該鍵不存在或值爲null或0的位置當然)。

你也應該考慮不是要求在你的方式setFragmentBackground,因爲假定託管活動永遠是MyFragmentActivity一個實例,而是你應該定義與setFragmentBackground方法的接口,使活動執行該接口。然後,在該片段中,重寫onAttach,檢查該片段被附接有instanceof到實現該接口和活動分配給在一個片段字段變量活動稱爲listener。在onDetach()中將偵聽器設置爲null,並在調用其上的任何方法之前始終檢查偵聽器是否爲null。

+0

SDJMcHattie,很好的建議!..試試吧,這個週末我腦子都死了..順便說一句,我是從應用程序類設置背景,但你有一個非常有效的點!再次感謝 – irobotxxx