如何区分EditText是粘贴到setText()还是设置每个setText()?

时间:2019-05-24 09:51:20

标签: android kotlin android-edittext

我有一个EditText通过

填充
df['good']= np.where(df['fruit'].isin(good), 'good', 'not good')
print (df)
          fruit  bites      good
0         Apple      1      good
1        Banana      2  not good
2    Clementine      3      good
3  Dragon fruit      1  not good
4    Elderberry      2  not good
5          Figs      3      good
6        Grapes      4      good

这是EditText而不是TextView的原因是因为我也想在其中粘贴内容(稍后在用户操作应用时),或者在适用时手动键入内容。

但是我必须

  • 如果通过editText.setText(content) 设置了editText,请重置标志
  • ,如果用户粘贴则什么也没有

如何区分EditText的填充方式? setText()的回调在每种情况下都会触发。

2 个答案:

答案 0 :(得分:0)

您可以设置监听器类:

public interface GoEditTextListener {
void onUpdate();
}

自定义Edittext

public class GoEditText extends EditText
{
    ArrayList<GoEditTextListener> listeners;

    public GoEditText(Context context)
    {
        super(context);
        listeners = new ArrayList<>();
    }

    public GoEditText(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        listeners = new ArrayList<>();
    }

    public GoEditText(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        listeners = new ArrayList<>();
    }

    public void addListener(GoEditTextListener listener) {
        try {
            listeners.add(listener);
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    }

    /**
     * Here you can catch paste, copy and cut events
     */
    @Override
    public boolean onTextContextMenuItem(int id) {
        boolean consumed = super.onTextContextMenuItem(id);
        switch (id){
            case android.R.id.cut:
                onTextCut();
                break;
            case android.R.id.paste:
                onTextPaste();
                break;
            case android.R.id.copy:
                onTextCopy();
        }
        return consumed;
    }

    public void onTextCut(){
    }

    public void onTextCopy(){
    }

    /**
     * adding listener for Paste for example
     */
    public void onTextPaste(){
        for (GoEditTextListener listener : listeners) {
            listener.onUpdate();
        }
    }
}

xml

<com.yourname.project.GoEditText
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/editText1"/>

代码

private GoEditText editText1;

editText1 = (GoEditText) findViewById(R.id.editText1);

            editText1.addListener(new GoEditTextListener() {
                @Override
                public void onUpdate() {
//here do what you want when text Pasted
                }
            });

答案 1 :(得分:0)

仅扩展EditText,包括标志,并覆盖setText

public class MyEditText extends EditText {
    boolean fromSetText;

    @Override
    public void setText(String text) {

        super.setText(text);
        fromSetText = true;
    }
}

您可以根据自己的要求定义自己的设置器/获取器和构造器。