2013-07-24 3 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(); '-> to' android.support.v4.view.ViewGroup.LayoutParams layoutParams = new LayoutParams(); ' – g00dy

ответ

3

Это потому, что вы поняли LayoutParams в этом контексте: настройки макета Params вашего ViewPager будет макетом его в своем родителе, который является ViewGroup. Поэтому вы должны передать экземпляр ViewGroup.LayoutParams.
Если вы хотите, а выложить компонент в вашем ViewPager, вы должны установить макет Params ребенка с экземпляром 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) Вам нужно использовать LayoutParam из родителя 'ViewPager', а не' ViewPager'. И я просто забыл об этом .. :) – Zyoo

5

Вы действительно не должны быть настройки макета Params программно только для настройки ширины и height to "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 - что может быть легче манипулировать в соответствии с вашими потребностями.

Смежные вопросы