Classcastexception:Widget无法转换为布局

时间:2014-07-17 05:11:58

标签: android classcastexception

虽然这往往是一个非常基本的问题,但我无法解决这个问题。我搜索了类似的问题但没有解决我的问题。

我创建了自己的类,我在其中创建了一些基本控件,并在我的xml中将此类称为

<com.mypackagename.classname
..
..
/>

并且有些观点在此内部。在此之前,我想将relativelayout添加为

activity_main1.xml:

<RelativeLayout xmlns:android="schemas.android.com/apk/res/android"
    xmlns:android1="http://schemas.android.com/apk/res/android"

    android1:layout_width="match_parent"

    android1:layout_height="wrap_content" >

<com.test.MainLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/mainlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >


     <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

       <ImageView
                android:id="@+id/drawer_image"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"
                android:src="@drawable/ic_drawer" />
    </LinearLayout>
</com.test.MainLayout>
</RelativeLayout >

和我宣布的主要活动是 的 MainActivity:

Myview view;
view = (Myview)this.getLayoutInflater().inflate(R.layout.activity_main1, null);
        setContentView(view); 

其中MyView是我拥有自己的控件的类。

添加相对布局后,我尝试了类似

的内容

MainActivity1.java:

public class MainActivity1 extends FragmentActivity 
{

 @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);       
    RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
         view = (Myview)this.getLayoutInflater().inflate(R.layout.activity_main1, null);
            item.addView(view);
    setContentView(item); // facing an error here

.......... rest of the code
}

我的布局活动是

public class MainLayout1 extends LinearLayout 
{
....

}

在运行它时抛出classcastexception,错误是

java.lang.ClassCastException:android.widget.RelativeLayout无法强制转换为com.view.layout.MainLayout

1 个答案:

答案 0 :(得分:0)

view =(Myview)this.getLayoutInflater()。inflate(R.layout.activity_main1,null);

在你的java类中,你在视图中得到MyView Object,但它实际上是一个布局文件实例,它在这里返回它的父布局RelativeLayout

自膨胀(R.layout.activity_main1,null);返回RelativeLayout的对象。取而代之的是,您必须获取MainLayout1的实例(R.id.mainlayout),然后将其转换为MyView对象,如:

RelativeLayout item = (View)this.getLayoutInflater().inflate(R.layout.activity_main1,null);

view = (Myview) item.findViewById(R.id.mainlayout);

item.addView(view);

setContentView(item);