编辑文本中的文本观察器使编辑文本变慢

时间:2014-01-04 06:37:32

标签: android textwatcher

在我的平板电脑应用程序中,我使用了片段,一个片段有多个Edittexts,我有一个线性布局,它将添加一个子布局,用户希望添加的次数,在该片段中

此子布局有两个edittext,这个edittext都有

  1. addtextchangelistener(Textwatcher)和
  2. onfocuschangelistner
  3. 每次更改文本时,都会在edittext中检查3个条件 每次改变焦点时,都会在edittext

    中检查2个条件

    完成所有这些条件检查后,我遇到的问题是,edittext输入速度太慢,就像我输入一封电子邮件,整个电子邮件在5秒或更长时间后完全输入,

    这是子布局中1个编辑文本的代码:

    receiverName.setOnFocusChangeListener(new OnFocusChangeListener() {
    
            @Override
            public void onFocusChange(View paramView, boolean hasFocus) {
                receivernameFocus = hasFocus;
                if(hasFocus)
                {
                    if(receiverName.getText().toString().length()>0)
                        ReceiverName_btn_cancel.setVisibility(View.VISIBLE);
                    else
                        ReceiverName_btn_cancel.setVisibility(View.INVISIBLE);
                }
                else
                    ReceiverName_btn_cancel.setVisibility(View.INVISIBLE);
            }
        });
        receiverName.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void onTextChanged(CharSequence paramCharSequence, int paramInt1,int paramInt2, int paramInt3) {
    
    
                if(receivernameFocus)
                {
                    if(receiverName.getText().toString().length()>0)
                    {
                        receiverNamePresent = true;
                        ReceiverName_btn_cancel.setVisibility(View.VISIBLE);
                    }
                    else
                    {
                        receiverNamePresent = false;
                        ReceiverName_btn_cancel.setVisibility(View.INVISIBLE);
                    }
                }
                else
                    ReceiverName_btn_cancel.setVisibility(View.INVISIBLE);
    
                if(receiverEmailPresent && receiverNamePresent)
                    addReceiver.setBackgroundResource(R.drawable.plus_receiver);
                else
                    addReceiver.setBackgroundResource(R.drawable.plus_deselect_receiver);
            }
    
            @Override
            public void beforeTextChanged(CharSequence paramCharSequence,
                    int paramInt1, int paramInt2, int paramInt3) {
            }
    
            @Override
            public void afterTextChanged(Editable paramEditable) {
            }
        });
    

    其他edittext存在相同的条件,每次用户给另一个视图充气时,也会为新视图创建同一组edittext。

    我无法删除条件,所有条件都是必需的,您可以看到它只是一些按钮可见性或设置背景资源

    如何优化此代码,或如何加快Android平板电脑的edittext打字速度?

    编辑:如果我输入10个字母,则在编辑文本中每秒只显示1个字母(因此10秒后所有10个字母都会在edittext中显示),我相信这是因为多个条件检查而发生的在onTextChanged方法中,显示文本的延迟对于用户体验来说太过分了。

    如何让edittext以我输入的速度显示文本

    由于

1 个答案:

答案 0 :(得分:0)

此处public void onTextChanged(CharSequence paramCharSequence, int paramInt1,int paramInt2, int paramInt3)通常采用以下格式:

public void onTextChanged(CharSequence s, int start, int before, int count)

所以在这里你需要使用paramInt3进行一些操作。如果您想在输入3个字母后显示建议文字,请以这种方式在此处执行操作:

public void onTextChanged(CharSequence s,int start,int before,int count) {

        if (count%3 == 1) 
        {
           adapter.clear();
           GetPlaces task = new GetPlaces();                   
           task.execute(dep_place.getText().toString());
        }

}

这里我在后台更新了服务器端的文本。您只需要修改此部分,您的文本将在此处使用此代码。

感谢。