新类扩展FrameLayout无法实例化

时间:2012-11-27 10:31:22

标签: android android-layout

我写了一个扩展FrameLayout的类。

public class ReaderFrameLayout extends FrameLayout
{
    public ReaderFrameLayout(Context context)
    {
        this(context, null);
    }

    public ReaderFrameLayout(Context context, AttributeSet attrs)
    {
        this(context, attrs, 0);
    }

    public ReaderFrameLayout(Context context, AttributeSet attrs, int defaultStyle)
    {
        super(context, attrs, defaultStyle);
        WebView readerWebView = (WebView) findViewById(R.id.fragment_reader_webview);
        readerWebView.setOnTouchListener(new OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {
                Log.d("ReaderFrameLayout", "setOnTouchListener");
                return true;
            }
        });
    }
}

并将其添加到片段中。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <com.mbs.helpers.ReaderFrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="83dp" >

        <WebView
            android:id="@+id/fragment_reader_webview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

    </com.mbs.helpers.ReaderFrameLayout>

</RelativeLayout>

Eclipse中的错误:

com.android.layoutlib.bridge.MockView无法强制转换为android.view.ViewGroup Window&gt;中记录了异常详细信息。显示视图&gt;错误日志 无法实例化以下类: - com.mbs.helpers.ReaderFrameLayout(Open Class,Show Error Log) 有关详细信息,请参阅错误日志(窗口&gt;显示视图)。 提示:在自定义视图中使用View.isInEditMode()在Eclipse中显示时跳过代码

当然,该应用程序不起作用。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

只需以编程方式创建Web视图:

public ReaderFrameLayout(Context context, AttributeSet attrs, int defaultStyle)
{
    super(context, attrs, defaultStyle);
    WebView readerWebView = new WebView(context);
    addView(readerWebView);
    readerWebView.setOnTouchListener(new OnTouchListener()
    {
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            Log.d("ReaderFrameLayout", "setOnTouchListener");
            return true;
        }
    });
}

并将其从XML布局中删除

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <com.mbs.helpers.ReaderFrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="83dp" />

</RelativeLayout>

如果您确实想要从XML布局创建自定义视图,则需要在单独的XML文件中执行此操作,并在自定义类中对其进行充气。

对于instace,res/layout/reader.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <WebView
        android:id="@+id/fragment_reader_webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</FrameLayout>

在您的代码中:

    public ReaderFrameLayout(Context context, AttributeSet attrs,
            int defaultStyle) {
        super(context, attrs, defaultStyle);
        LayoutInflater.from(context).inflate(R.layout.reader, this);
        WebView readerWebView = (WebView) findViewById(R.id.fragment_reader_webview);
        readerWebView.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.d("ReaderFrameLayout", "setOnTouchListener");
                return true;
            }
        });
    }