EditText上的事件未被触发

时间:2015-10-22 10:11:24

标签: android android-edittext

老实说,我不知道发生了什么,但是在调试时没有发现下面列出的任何事件,这怎么可能呢?我不知道在这种情况下提供哪些其他信息会很有用。

>

XML

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

public class MarkerActivity extends AppCompatActivity {

    private TextView titleTv, hashtagTv, dateTv, colorTv;
    private EditText test_edit;

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

        titleTv = (TextView) findViewById(R.id.title_info);
        hashtagTv = (TextView) findViewById(R.id.hashtag_info);
        dateTv = (TextView) findViewById(R.id.date_info);
        colorTv = (TextView) findViewById(R.id.color_info);
        test_edit = (EditText) findViewById(R.id.test_edit);

        test_edit.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (event.getAction() == KeyEvent.KEYCODE_SPACE) {
                    test_edit.setText(test_edit.getText().toString() + " #");
                    return true;
                }
                return false;
            }
        });

        test_edit.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (event.getAction() == KeyEvent.KEYCODE_SPACE) {
                    test_edit.setText(test_edit.getText().toString() + " #");
                    return true;
                }
                return false;
            }
        });

        test_edit.addTextChangedListener(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) {

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

        Bundle bundle = getIntent().getExtras();
        if (bundle != null && bundle.containsKey("marker_title")) {
            String marker_title = bundle.getString("marker_title");
            if (marker_title != null) {
                MarkerModel markerModel = DatabaseHelper.get().getMarker(marker_title);

                titleTv.setText("Title: " + markerModel.getTitle());
                dateTv.setText("Date: " + markerModel.getDay() + "/" + markerModel.getMonth() + "/" + markerModel.getYear());
                hashtagTv.setText("Hashtags: " + markerModel.getHashtags());
                colorTv.setText("Color: " + markerModel.getColor());

            }
        }
    }

}

3 个答案:

答案 0 :(得分:0)

在回复imeOption的操作之前,您需要在xml的edittext中指定setOnEditorActionListener()

<EditText
android:id="@+id/test_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content""
android:inputType="text"
android:imeOptions="actionSend" />

只是为了通知你这种工作textWatcher是一个更好的选择。这总是有效的。

答案 1 :(得分:0)

我在TextWatcher中设置了一些Logs,它实际上显示了它。仍然没有打破断点,似乎这是Android Studio的一个问题..但它可能是什么?重新启动IDE,没有做到这一点

答案 2 :(得分:0)

我认为你必须这样做:

test_edit.addTextChangedListener(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) {  }

    @Override
    public void afterTextChanged(Editable s) {
        if(s.toString().endsWith(" "))
        {
            test_edit.setText(test_edit.getText().toString() + " #");
            test_edit.setSelection(test_edit.length());
        }
    }
});

在评论中保留其他两位听众。试试吧。