Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在活动中使用自定义EditText类?_Android_Android Edittext - Fatal编程技术网

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实现