TextWatcher导致崩溃

时间:2015-04-25 19:41:09

标签: android textwatcher

这是Android开发的新手。

虽然我制作的应用程序可以计算锻炼所消耗的卡路里,但我发现在EditText中添加TextWatcher会导致崩溃,即使我只是将其添加到" etEnergy"。

我已经搜索了许多关于崩溃的问题,但是大多数问题都是在侦听器中创建一个无限循环,并通过删除侦听器然后将其添加回来解决。我补充说,但它没有用。

当我无法找到我在该方法中创建的日志时,我在Logcat中发现了此消息:

警告ActivityManager(744):ActivityRecord的活动暂停超时{41ea1128 u0 [包名称] / .MainActivity t65 f}

以下是MainActivity.java中的问题代码。没有它们我可以正确执行,但我需要它们来完成这个应用程序。

protected EditText etEnergy,etWeight,etTime;
protected TextView tvCals;
//double t,a; //don't make any sense in following code.
myTextWatch tw;

class myTextWatch implements TextWatcher{

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        etEnergy.removeTextChangedListener(this);
        etWeight.removeTextChangedListener(this);
        etTime.removeTextChangedListener(this);
        Log.d("TextWatcher","TextChangedListenerRemoved");
        etEnergy.addTextChangedListener(this);
        etWeight.addTextChangedListener(this);
        etTime.addTextChangedListener(this);

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
}//end of class myTextWatch

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    etEnergy=(EditText) findViewById(R.id.etEnergy);
    etWeight=(EditText) findViewById(R.id.etWeight);
    etTime=(EditText) findViewById(R.id.etTime);
    etEnergy.addTextChangedListener(tw);
    etWeight.addTextChangedListener(tw);
    etTime.addTextChangedListener(tw);
    tvCals=(TextView) findViewById(R.id.tvCals);
}

几乎忘了说我使用Android Studio 1.1.0和应用程序将在物理设备上运行,这是一个HTC Butterfly,Android版本是4.4.2,应用程序的最低API等级是14(IceCreamSandwich / 4.0)。

英语不是我的母语,但我会努力阅读任何回复。

感谢您的阅读。 也很感谢你的回答!

2 个答案:

答案 0 :(得分:0)

试试这个

protected EditText etEnergy,etWeight,etTime;
    protected TextView tvCals;
    //double t,a; //don't make any sense in following code.
    TextWatch tw;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    etEnergy=(EditText) findViewById(R.id.etEnergy);
    etWeight=(EditText) findViewById(R.id.etWeight);
    etTime=(EditText) findViewById(R.id.etTime);
    etEnergy.addTextChangedListener(tw);
    etWeight.addTextChangedListener(tw);
    etTime.addTextChangedListener(tw);
    tvCals=(TextView) findViewById(R.id.tvCals);
}

tw= new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        etEnergy.removeTextChangedListener(this);
        etWeight.removeTextChangedListener(this);
        etTime.removeTextChangedListener(this);
        Log.d("TextWatcher","TextChangedListenerRemoved");
        etEnergy.addTextChangedListener(this);
        etWeight.addTextChangedListener(this);
        etTime.addTextChangedListener(this);

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
};//end of class myTextWatch

答案 1 :(得分:0)

您的EditText似乎是空的。请确保在activity_main布局中EditText包含以下ID:etEnergy, etWeight, etTime

作为旁注 - 您实际上并未创建myTextWatch的新对象,并尝试在addTextChangedListener(tw)中传递null。