当前位置: 代码迷 >> Android >> 未触发EditText上的事件
  详细解决方案

未触发EditText上的事件

热度:47   发布时间:2023-08-04 11:01:37.0

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

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());

            }
        }
    }

}

XML格式

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/color_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="color" />

    <TextView
        android:id="@+id/date_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="date" />

    <TextView
        android:id="@+id/title_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="title" />

    <TextView
        android:id="@+id/hashtag_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="hashtags" />

    <EditText
        android:id="@+id/test_edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>

您需要在xml的imeOption中指定imeOption ,然后才能响应setOnEditorActionListener()

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

并且仅为了通知您这种工作, textWatcher是一个更好的选择。 一直有效。

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

我认为您必须这样做:

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());
        }
    }
});

让其他两个听众保持评论状态。 试试吧。

  相关解决方案