获得ClassCastException异常试图dyanmically插入RelativeLayout的时候?异常、时候、ClassCastException、RelativeLayout

由网友(智障儿童欢乐多)分享简介:的setContentView(R.layout.main2);OUT =新的ArrayList< TextView的>();llay =(RelativeLayout的)findViewById(R.id.displayPoll);RelativeLayout.LayoutParams lparams...

 的setContentView(R.layout.main2);

        OUT =新的ArrayList< TextView的>();
        llay =(RelativeLayout的)findViewById(R.id.displayPoll);

       RelativeLayout.LayoutParams lparams =新RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
       RelativeLayout.LayoutParams lparams1 =新RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
        的LayoutParams LPAR =新的LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        Log.v(我的,rched);


        out.add(新的TextView(本));
        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(标题+ 0 +ñññññ N);
        my_poll.this.llay.addView(out.get(0));

            的for(int i = 1;我3;;我++)// mJsonArray.length();我++)
            {
                out.add(新的TextView(本));

                out.get(我).setLayoutParams(LPAR);
                out.get(ⅰ).setId第(i + 1);
                Log.v(我的,哎+ out.get(I-1).getId());

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

                out.get(我).setText(标题+ I +ñññññ N);

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

            }

                Log.v(我的,rasasched);
 

通过执行程序我收到此错误

  04-06 20:30:49.372:E / AndroidRuntime(1093):致命异常:主要
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):在android.widget.ScrollView.onMeasure(ScrollView.java:301)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.view.View.measure(View.java:8171)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.view.View.measure(View.java:8171)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.view.View.measure(View.java:8171)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.view.View.measure(View.java:8171)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.view.ViewRoot.performTraversals(ViewRoot.java:801)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.os.Handler.dispatchMessage(Handler.java:99)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.os.Looper.loop(Looper.java:123)
04-06 20:30:49.372:E / AndroidRuntime(1093):在android.app.ActivityThread.main(ActivityThread.java:4627)
04-06 20:30:49.372:E / AndroidRuntime(1093):在java.lang.reflect.Method.invokeNative(本机方法)
04-06 20:30:49.372:E / AndroidRuntime(1093):在java.lang.reflect.Method.invoke(Method.java:521)
04-06 20:30:49.372:E / AndroidRuntime(1093):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
04-06 20:30:49.372:E / AndroidRuntime(1093):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-06 20:30:49.372:E / AndroidRuntime(1093):在dalvik.system.NativeStart.main(本机方法)
 

这是I M使用XML文件..                  

 < RelativeLayout的
机器人:ID =@ + ID / displayPoll
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:背景=@可绘制/ back_blue_grad
机器人:填充=0dp>


   <的TextView
    机器人:ID =@ + ID /用户名
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_alignParentTop =真
    机器人:layout_centerHorizo​​ntal =真
    机器人:文本=Priyank Bharad
    机器人:文字颜色=#FFF
    机器人:TEXTSIZE =28dp
    机器人:TEXTSTYLE =黑体/>
   < ImageView的
    机器人:ID =@ + ID / p_image
    机器人:layout_width =35dp
    机器人:layout_height =35dp
    机器人:layout_marginRight =10dp
    机器人:SRC =@可绘制/ final_fb
    机器人:layout_toLeftOf =@用户名/用户名/>
< / RelativeLayout的>

< /滚动型>
 
帮忙看下内存卡测试图 用读卡器测得,在手机上会一样么 ,读写速度多少 还有怎么看内存卡实际大小

解决方案

这里的错误是在子类的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):在android.widget.ScrollView.onMeasure(ScrollView.java:301)
 

Android正在试图强制转换的 RelativeLayout.LayoutParams 来,我相信应该是 ScrollView.LayoutParams 实例,因为你的 RelativeLayout的是在滚动型

该修补程序应该是改变你使用的 RelativeLayout的 ScrollView.LayoutParams 。

        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+"nnnnnn");
        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+"nnnnnn");

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

            }

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

By executing the program I am getting this error

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)

This is the XML file i m using..

<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>

解决方案

The mistake here is in the choice of the subclass of LayoutParams.

The correct version of LayoutParams to instantiate depends on the parent of the view you're creating, not the type of the view itself.

Take a look at the logcat dump:

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 is trying to typecast the instance of RelativeLayout.LayoutParams to, what I believe should be ScrollView.LayoutParams, because your RelativeLayout is inside of a ScrollView.

The fix should be to change the layout params type that you're using on the RelativeLayout to ScrollView.LayoutParams.