我试图通过覆盖button类来创建3状态切换按钮.
尽管代码中没有错误,但是Eclipse在布局xml中显示了以下问题.
以下类无法实例化:
- com.example.threewaytoggle.TriTogglebutton (Open Class, Show Error Log)See the Error Log (Window > Show VIEw) for more details.Tip: Use VIEw.isInEditMode() in your custom vIEws to skip code when shown in Eclipse
在错误日志中,这即将到来:
com.example.threewaytoggle.TriTogglebutton Failed to instantiate.java.lang.NullPointerExceptionat androID.vIEw.VIEw.mergeDrawableStates(VIEw.java:7506)at com.example.threewaytoggle.TriTogglebutton.onCreateDrawableState(TriTogglebutton.java:42)at androID.vIEw.VIEw.getDrawableState(VIEw.java:7410)at androID.vIEw.VIEw.setBackgroundDrawable(VIEw.java:7583)....
以下是代码:
布局xml:
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:orIEntation="vertical" > <com.example.threewaytoggle.TriTogglebutton androID:ID="@+ID/triTogglebutton1" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="TriTogglebutton" /></linearLayout>
自定义按钮类别:
package com.example.threewaytoggle;import androID.content.Context;import androID.util.AttributeSet;import androID.Widget.button;public class TriTogglebutton extends button { int _state = 0; public TriTogglebutton(Context context) { super(context); _state = 0; this.setText("1"); } public TriTogglebutton(Context context, AttributeSet attrs) { super(context, attrs); _state = 0; this.setText("1"); } public TriTogglebutton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); _state = 0; this.setText("1"); } private final int[] STATE_ONE_SET = { R.attr.state_one }; private final int[] STATE_TWO_SET = { R.attr.state_two }; private final int[] STATE_THREE_SET = { R.attr.state_three }; @OverrIDe protected int[] onCreateDrawableState(int extraSpace) { final int[] drawableState = super.onCreateDrawableState(extraSpace + 3); if (_state == 0) { mergeDrawableStates(drawableState, STATE_ONE_SET); } else if (_state == 1) { mergeDrawableStates(drawableState, STATE_TWO_SET); } else if (_state == 2) { mergeDrawableStates(drawableState, STATE_THREE_SET); } return drawableState; } @OverrIDe public boolean performClick() { nextState(); return super.performClick(); } private voID nextState() { _state++; if (_state > 2) { _state = 0; } setbuttonText(); } private voID setbuttonText() { //Todo } public int getState() { return _state; }}
解决方法:
找到了…
private static final int[] STATE_ONE_SET = { R.attr.state_one };private static final int[] STATE_TWO_SET = { R.attr.state_two };private static final int[] STATE_THREE_SET = { R.attr.state_three };
但是,这怎么会引起问题呢?
总结以上是内存溢出为你收集整理的Android:创建“自定义3状态”切换按钮时出现问题全部内容,希望文章能够帮你解决Android:创建“自定义3状态”切换按钮时出现问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)