Android 如何在活动中使用自定义EditText类?
Android 如何在活动中使用自定义EditText类?,android,android-edittext,Android,Android Edittext,MainActivity中缺少一些内容,但我不知道它是什么。当我运行应用程序时,会出现以下崩溃: public class MainActivity extends Activity { MyEditText myEditText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ma
MainActivity
中缺少一些内容,但我不知道它是什么。当我运行应用程序时,会出现以下崩溃:
public class MainActivity extends Activity {
MyEditText myEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
myEditText = new MyEditText(this);
}
}
您正在调用beforeTextChanged的
setText
内部。这将触发对beforeTextChanged的另一个调用,这将触发对setText
的另一个调用。。。重复此操作,直到堆栈帧用完
在
postertextchanged
(或更高版本)之前不要更改编辑文本的内容,并注意创建这样的无限循环。您在beforeTextChanged
的内部调用setText
。这将触发对beforeTextChanged的另一个调用,这将触发对setText
的另一个调用。。。重复此操作,直到堆栈帧用完
在
postertextchanged
(或更高版本)之前不要更改编辑文本的内容,并注意创建这样的无限循环。您在beforeTextChanged
的内部调用setText
。这将触发对beforeTextChanged的另一个调用,这将触发对setText
的另一个调用。。。重复此操作,直到堆栈帧用完
在
postertextchanged
(或更高版本)之前不要更改编辑文本的内容,并注意创建这样的无限循环。您在beforeTextChanged
的内部调用setText
。这将触发对beforeTextChanged的另一个调用,这将触发对setText
的另一个调用。。。重复此操作,直到堆栈帧用完
在postertextchanged
(或更高版本)之前不要更改编辑文本的内容,并注意创建这样的无限循环。init()有问题代码>
大多数堆栈溢出错误都与间接调用自身的方法有关。这里也是这样
您可以在MyEditText之外设置TextWather
因此,它可能是函数的嵌套调用跟踪您的初始值,它创建了TextWather回调函数的无限调用。
编辑:
MyEditText.java
java.lang.StackOverflowError
at java.lang.StringBuilder.append(StringBuilder.java:202) at com.example.dialogfragmentexample.MyEditText$2.beforeTextChanged(MyEditText.java:55)
public class MyEditText extends EditText {
public MyEditText(Context context) {
super(context);
// init();
}
public MyEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// init();
}
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
// init();
}
}
MainActivity.java
java.lang.StackOverflowError
at java.lang.StringBuilder.append(StringBuilder.java:202) at com.example.dialogfragmentexample.MyEditText$2.beforeTextChanged(MyEditText.java:55)
public class MyEditText extends EditText {
public MyEditText(Context context) {
super(context);
// init();
}
public MyEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// init();
}
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
// init();
}
}
公共类MainActivity扩展了ActionBarActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyEditText MyEditText=新的MyEditText(此);
addTextChangedListener(新的CustomTextWatcher(myEditText));
}
//TextWathcer
私有类CustomTextWatcher实现TextWatcher{
私有MyEditText-mEditText;
公共CustomTextWatcher(MyEditText MyEditText){
mEditText=myEditText;
}
@凌驾
public void onTextChanged(字符序列,int start,int before,
整数计数){
}
@凌驾
public void PostTextChanged(可编辑arg0){
}
@凌驾
更改前的公共无效(字符序列、整数开始、整数计数、,
整数后){
Log.e(“后文本更改”和“+s”);
如果(s.toString().length()>0和&s.toString().charAt(0)!=“$”){
StringBuilder b=新的StringBuilder(s.toString());
b=b.反向();
b、 附加(“$”);
b=b.反向();
mEditText.setText(b);
mEditText.setSelection(mEditText.getText()
.length());
}否则{
int计数器=0;
对于(int i=0;i1){
字符串str=s.toString().replace(“$”,“”)。trim();
str=str.replaceAll(“\\s+”,”);
StringBuilder b=新的StringBuilder(str);
b=b.反向();
b、 附加(“$”);
b=b.反向();
mEditText.setText(b);
mEditText.setSelection(mEditText.getText()
.length());
}否则{
int spaceCount=0;
对于(int i=0;i0){
字符串str=s.toString().replace(“$”,“”)。trim();
str=str.replaceAll(“\\s+”,”);
StringBuilder b=新的StringBuilder(str);
mEditText.setText(b);
mEditText.setSelection(mEditText
.getText().length());
}
}
}
}
}
}
布局文件与前一个相同。问题与init()代码>
大多数堆栈溢出错误都与间接调用自身的方法有关。这里也是这样
您可以在MyEditText之外设置TextWather
因此,它可能是函数的嵌套调用跟踪您的初始值,它创建了TextWather回调函数的无限调用。
编辑:
MyEditText.java
java.lang.StackOverflowError
at java.lang.StringBuilder.append(StringBuilder.java:202) at com.example.dialogfragmentexample.MyEditText$2.beforeTextChanged(MyEditText.java:55)
public class MyEditText extends EditText {
public MyEditText(Context context) {
super(context);
// init();
}
public MyEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// init();
}
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
// init();
}
}
MainActivity.java
java.lang.StackOverflowError
at java.lang.StringBuilder.append(StringBuilder.java:202) at com.example.dialogfragmentexample.MyEditText$2.beforeTextChanged(MyEditText.java:55)
public class MyEditText extends EditText {
public MyEditText(Context context) {
super(context);
// init();
}
public MyEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// init();
}
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
// init();
}
}
公共类MainActivity扩展了ActionBarActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyEditText MyEditText=新的MyEditText(此);
addTextChangedListener(新的CustomTextWatcher(myEditText));
}
//TextWathcer
私有类CustomTextWatcher实现