2012-04-06 2 views
11
 setContentView(R.layout.main2); 

     out= new ArrayList<TextView>(); 
     llay =(RelativeLayout) findViewById(R.id.displayPoll); 

     RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
     RelativeLayout.LayoutParams lparams1 = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
     LayoutParams lpar = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     Log.v("my","rched"); 


     out.add(new TextView(this)); 
     out.get(0).setLayoutParams(lpar); 
     out.get(0).setId(1); 
     lparams1.addRule(RelativeLayout.ALIGN_BOTTOM,R.id.user_name); 
     llay.setLayoutParams(lparams1); 
     out.get(0).setText("Title "+0+"\n\n\n\n\n\n"); 
     my_poll.this.llay.addView(out.get(0)); 

      for (int i = 1; i < 3;i++)//mJsonArray.length(); i++) 
      { 
       out.add(new TextView(this)); 

       out.get(i).setLayoutParams(lpar); 
       out.get(i).setId(i+1); 
       Log.v("my","hey : "+out.get(i-1).getId()); 

       lparams.addRule(RelativeLayout.BELOW,out.get(i-1).getId()); 
       llay.setLayoutParams(lparams); 

       out.get(i).setText("Title "+i+"\n\n\n\n\n\n"); 

       llay.addView(out.get(i)); 

      } 

       Log.v("my","rasasched"); 

Выполнив программу я получаю эту ошибкуПолучение ClassCastException при попытке вставить RelativeLayout dyanmically?

04-06 20:30:49.372: E/AndroidRuntime(1093): FATAL EXCEPTION: main 
04-06 20:30:49.372: E/AndroidRuntime(1093): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.widget.ScrollView.onMeasure(ScrollView.java:301) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.view.View.measure(View.java:8171) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.view.View.measure(View.java:8171) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:526) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:304) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.view.View.measure(View.java:8171) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.view.View.measure(View.java:8171) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.view.ViewRoot.performTraversals(ViewRoot.java:801) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.os.Looper.loop(Looper.java:123) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at java.lang.reflect.Method.invoke(Method.java:521) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at dalvik.system.NativeStart.main(Native Method) 

Это XML-файл, используя им ..

<RelativeLayout 
android:id="@+id/displayPoll" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/back_blue_grad" 
android:padding="0dp" > 


    <TextView 
    android:id="@+id/user_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:text="Priyank Bharad" 
    android:textColor="#fff" 
    android:textSize="28dp" 
    android:textStyle="bold" /> 
    <ImageView 
    android:id="@+id/p_image" 
    android:layout_width="35dp" 
    android:layout_height="35dp" 
    android:layout_marginRight="10dp" 
    android:src="@drawable/final_fb" 
    android:layout_toLeftOf="@id/user_name"/> 
</RelativeLayout> 

</ScrollView> 
+0

Его печать последнего утверждения в LogCat..то есть Log.v («мой», «rasasched»); и возникает исключение. –

+0

Можете ли вы включить весь стек? Он должен сказать, какая строка выбрасывает исключение – slayton

+0

может кто-нибудь помочь http://stackoverflow.com/questions/30951608/java-lang-classcastexception-android-view-viewgrouplayoutparams-cannot-be-cast – Aditya

ответ

64

Ошибка здесь находится в выборе подкласса LayoutParams.

Правильная версия LayoutParams для создания экземпляра зависит от родителя в представлении вы создаете, не тип самого зрения.

Посмотрите на LogCat свалке:

04-06 20:30:49.372: E/AndroidRuntime(1093): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams 
04-06 20:30:49.372: E/AndroidRuntime(1093):  at android.widget.ScrollView.onMeasure(ScrollView.java:301) 

Android пытается типаж экземпляр из RelativeLayout.LayoutParams в то, что я считаю, должно быть ScrollView.LayoutParams, потому что ваш RelativeLayout находится внутри ScrollView.

Исправление должно состоять в том, чтобы изменить тип параметров макета, который вы используете на RelativeLayout, до ScrollView.LayoutParams.

+0

Просто из любопытства .. есть есть ли какая-либо документация, в которой говорится о выборе подкласса layoutParams? –

+1

@ adrian_88: Да, это объясняется в [документация] (http://developer.android.com/guide/topics/ui/declaring-layout.html#layout-params): «Каждый дочерний элемент должен определять LayoutParams, которые подходят для его родителя, хотя он также может определять разные LayoutParams для своих собственных детей ». – wsanville

+0

Спасибо, это помогло –