2012-10-19 146 views
3

有以下XML:如何添加我的自定義視圖中的XML佈局?

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

    <com.ulnda.calendarapplication.MyCalendarView 
     android:id="@+id/calendarView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

MyCalendarView:

public class MyCalendarView extends CalendarView { 

    public MyCalendarView(Context context) { 
     super(context); 
    } 

    @Override 
    public void setOnClickListener(OnClickListener listener) { 
//  View v; 
//  v.setOn 

    } 

    @Override 
    public boolean performClick() { 
     Log.e("event", "perform_click"); 
     return true; 
    } 
} 

一切都很好,但是當我試圖執行此應用程序我已經得到了以下消息:

10-19 12:59:30.037: E/AndroidRuntime(30968): FATAL EXCEPTION: main 
10-19 12:59:30.037: E/AndroidRuntime(30968): android.view.InflateException: Binary XML file line #7: Error inflating class com.ulnda.calendarapplication.MyCalendarView 

我怎樣才能解決這個問題?

+0

full stacktrace – njzk2

+0

(你沒有足夠的構造函數) – njzk2

+0

你有沒有正確寫出名字?有時會發生 –

回答

2

嘗試添加這些構造太

public MyCalendarView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public MyCalendarView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 
2

你需要實現一些構造這個工作。視圖有以下:

  • View(Context context)
  • [視圖(上下文範圍內,的AttributeSet ATTRS)](http://developer.android.com/reference/android/view/View.html#View(機器人。 content.Context,android.util.AttributeSet))
  • [查看(語境上下文,的AttributeSet ATTRS,INT defStyle)](http://developer.android.com/reference/android/view/View.html#View( android.content.Context,android.util.AttributeSet,int))

第二個和第三個用於XML通貨膨脹。你需要實現你的視圖類的構造函數,它對應於第二個,也可能是第三個。也就是說,執行:

  • MyCalendar(上下文的背景下,AttributeSet中的ATTRS)

,並添加以下,如果你需要(可能不是):

  • MyCalendar(上下文的背景下,AttributeSet中的ATTRS ,詮釋defStyle)
相關問題