在输入内容后立即更改edittext值

时间:2018-04-18 10:11:04

标签: android android-edittext textwatcher

您可以在输入内容后立即更改edittext值吗?我希望我的输入和输出位于同一edittext。我使用textwatcher来获取输入并将其输出到同一edittext

package com.example.lathrix.textwatcher;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextWatcher mid = null;
    EditText sat_amin = (EditText) findViewById(R.id.asd);
    String satamin = sat_amin.getText().toString();
    int satamln = satamin.length();
    String last = satamin.substring(satamin.length() - 1);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        mid = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                switch(satamln){
                    case 1:
                        sat_amin.setText("12:0" +satamin + " AM");
                        break;

                    case 2:
                        if (last == "p"){
                            sat_amin.setText("12:0" +satamin + " PM");
                        }else{
                            sat_amin.setText("12:" +satamin + " AM");
                        }
                        break;


                    default:
                        sat_amin.setText("");
                        break;



            }
        }



    };


    sat_amin.addTextChangedListener(mid);

    }

}

正如您所看到的,该程序是为了方便时间编码,我希望它在输入后在同一edittext输出解释时间。当我运行应用程序时,它只是崩溃。

1 个答案:

答案 0 :(得分:0)

您的应用崩溃是因为afterTextChanged一直在调用它,因为您更新了其中的editText,请在插入此类内容之前尝试删除TextChangedListener

 @Override
            public void afterTextChanged(Editable editable) {
                int satamln=5;
                switch (satamln) {
                    case 1:
                        sat_amin.removeTextChangedListener(this);
                        sat_amin.setText("12:0" + satamin + " AM");
                        sat_amin.addTextChangedListener(this);
                        break;

                    case 2:
                        sat_amin.removeTextChangedListener(this);
                        if (last == "p") {
                            sat_amin.setText("12:0" + satamin + " PM");
                        } else {
                            sat_amin.setText("12:" + satamin + " AM");
                        }
                        sat_amin.addTextChangedListener(this);
                        break;


                    default:
                        sat_amin.removeTextChangedListener(this);
                        sat_amin.setText("");
                        sat_amin.addTextChangedListener(this);
                        break;


                }
            }

希望这有帮助