2013-07-24 32 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的 - 这可以更容易地操纵,以满足您的需求。

相关问题