2012-08-14 204 views
0

我是新创建自定义组件。我正在通过扩展ProgressBar来创建自定义进度栏。但得到这个例外。自定义进度条在android

07-07 17:38:00.700: D/AndroidRuntime(3513): Shutting down VM 
07-07 17:38:00.700: W/dalvikvm(3513): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
07-07 17:38:00.720: E/AndroidRuntime(3513): FATAL EXCEPTION: main 
07-07 17:38:00.720: E/AndroidRuntime(3513): android.view.InflateException: Binary XML file line #7: Error inflating class com.customprogress.TextProgressBar 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.view.LayoutInflater.createView(LayoutInflater.java:503) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.app.Activity.setContentView(Activity.java:1647) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at com.customprogress.TextProgressBar.<init>(TextProgressBar.java:22) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at com.customprogress.Progress$Click.onClick(Progress.java:27) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.view.View.performClick(View.java:2408) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.view.View$PerformClick.run(View.java:8816) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.os.Handler.handleCallback(Handler.java:587) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.os.Handler.dispatchMessage(Handler.java:92) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.os.Looper.loop(Looper.java:123) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at dalvik.system.NativeStart.main(Native Method) 
07-07 17:38:00.720: E/AndroidRuntime(3513): Caused by: java.lang.NoSuchMethodException: TextProgressBar(Context,AttributeSet) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at java.lang.Class.getMatchingConstructor(Class.java:660) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at java.lang.Class.getConstructor(Class.java:477) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  at android.view.LayoutInflater.createView(LayoutInflater.java:475) 
07-07 17:38:00.720: E/AndroidRuntime(3513):  ... 20 more 

我的创造,这是这里代码.. TextProgressBar.class

public class TextProgressBar extends ProgressBar { 
    Activity activity; 


    public TextProgressBar(Activity activity) { 
     super(activity); 
     this.activity = activity; 
     this.activity.setContentView(R.layout.custom_progress); 
    } 

而且我从我的Progress.java活动

public class Progress extends Activity { 
    /** Called when the activity is first created. */ 
    Button buttonClick; 
    TextProgressBar textProgressBar; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     buttonClick = (Button) findViewById(R.id.buttonClick); 
     buttonClick.setOnClickListener(new Click()); 
    } 

    class Click implements OnClickListener 
    { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      textProgressBar = new TextProgressBar(Progress.this); 
     } 

    } 
} 

的XML调用这个类custom_progress被这里..

<?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="wrap_content" 
    android:orientation="vertical" > 

    <com.customprogress.TextProgressBar 
     android:id="@+id/progressBarWithText" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     /> 

</LinearLayout> 

请帮助我,如果有人知道这个解决方案.. 在此先感谢..

+0

使用'LayoutInflater' – Praveenkumar 2012-08-14 06:01:19

+0

@SpK你能PLZ阐述yourself.How我用LayoutInflator? – 2012-08-14 06:12:36

回答

2

尝试添加第二个构造函数。

public TextProgressBar(Context context, AttributeSet attrs) { 
    super(context, attrs); 

} 

看看是否有帮助:

+0

如何从我的Activity中调用此AttributeSet? – 2012-08-14 06:14:03

+0

我不认为你需要调用它。你只需要拥有它。 – 0gravity 2012-08-14 06:16:57

+0

@nick无需从您的活动中调用此构造函数。只需将此构造函数添加到您的自定义类并运行即可。通过布局XML文件加载组件时,将使用此构造函数。 – sunil 2012-08-14 06:18:32