2013-07-24 33 views
4

我有以下的代碼,但我得到一個異常如何以編程方式設置ViewPager layoutParams?

java.lang.ClassCastException: android.support.v4.view.ViewPager $的LayoutParams不能轉換到 android.view.ViewGroup $ MarginLayoutParams

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.question_details_full_photo_view_pager); 
     Bundle bundle = getIntent().getExtras(); 
     ArrayList<String> imageUrls = bundle.getStringArrayList("imageUrls"); 
     ImagePagerAdapter imagePagerAdapter = new ImagePagerAdapter(this, imageUrls, true); 

     android.support.v4.view.ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager_full_photo); 


     android.support.v4.view.ViewPager.LayoutParams layoutParams = new LayoutParams(); 
     layoutParams.width = LayoutParams.MATCH_PARENT; 
     layoutParams.height = LayoutParams.MATCH_PARENT; 
     viewPager.setLayoutParams(layoutParams); 


     viewPager.setAdapter(imagePagerAdapter); 
    } 
+0

您使用的是什麼進口產品? – g00dy

+0

快速解決方案可以(但不是必須)設置:改爲'android.support.v4.view.ViewPager.LayoutParams layoutParams = new LayoutParams();' - >到'android.support.v4.view.ViewGroup.LayoutParams layoutParams = new LayoutParams();' – g00dy

回答

3

這是因爲你在這方面誤解了LayoutParams:設置你的ViewPager佈局PARAMS將佈置它在其父是一個ViewGroup中。因此,您必須通過ViewGroup.LayoutParams的實例。
如果你想寧可在你ViewPager奠定了一個組件,你必須與ViewPager.LayoutParams

+0

ViewGroup.layoutParams也會引發相同的異常。它似乎期待android.view.ViewGroup $ MarginLayoutParams,但沒有這樣的事情 – code511788465541441

+0

@ code578841441有[http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html](http:/ /developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html) 您需要使用'ViewPager'的父級而不是'ViewPager'本身的LayoutParam。我只是忘了這個.. :) – Zyoo

5

你真的不應該設置佈局中的實例設置的兒童的佈局PARAMS PARAMS編程只是設立寬度和高度「match_parent」:這可以很容易地完成使用基本的XML聲明。

如果有更高級的東西需要您沒有指定 - 例如調整邊距或動態添加視圖,請考慮用與您的案例匹配的佈局包裝ViewPager。例如:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/view_pager_full_photo" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</RelativeLayout> 

在這種情況下,要調整邊距(例如):

ViewPager pager = (ViewPager) findViewById(R.id.view_pager_full_photo); 
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) pager.getLayoutParams(); 
lp.topMargin += TOP_MARGIN_HEIGHT_PX; 

注意,在這種情況下,佈局PARAMS由呼叫到尋呼機返回.getLayoutParams()是包裝RelativeLayout的 - 這可以更容易地操縱,以滿足您的需求。

相關問題