无法在android中正确实现textwatcher

无法在android中正确实现textwatcher,第1张

概述嘿家伙我正在寻找一种方法来找出用户在EditText中输入的内容,我偶然发现了TextWatcher.问题是我不明白函数中引用的参数是什么.我想跟踪用户逐字母输入的文本.我无法弄清楚哪个参数是正确的下标没有.我尝试了不同的变化,但没有运气好.基本上我想保存在数组中输入的文本,直到用户按

嘿家伙我正在寻找一种方法来找出用户在EditText中输入的内容,我偶然发现了TextWatcher.问题是我不明白函数中引用的参数是什么.我想跟踪用户逐字母输入的文本.我无法弄清楚哪个参数是正确的下标没有.我尝试了不同的变化,但没有运气好.
基本上我想保存在数组中输入的文本,直到用户按下“,”按钮或超过24个字符的限制.
请指教.

public class Main extends Activity implements OnClickListener {    // inputans.setonKeyListener(this);    @R_502_5554@ go;    TextVIEw answer;    TextVIEw check;    EditText inputans, inputq;    boolean done1 = false;    char[] ans = new char[30];    String predef = "Please answer my question";    char[] predefc = predef.tochararray();    int len = predefc.length;    int i = 0;    char[] substring = new char[30];    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        initialisevars();        go.setEnabled(false);        go.setonClickListener(this);        inputans.addTextChangedListener(new TextWatcher() {            @OverrIDe            public voID onTextChanged(CharSequence s, int start, int before,                    int count) {                if ((count - before) > 0) {                    char current = s.charat(before);                                       if (current == '.' || i >= 24) { // 24 check                        // ans[i]='s';                        // inputans.setText(predef,                        // TextVIEw.BufferType.EDItable);                        check.setText(predef);                        go.setEnabled(true);                    } else {                        ans[i] = current;                        i++; // char[] substring = char[30]; back @R_502_5554@                                // problem,check if prev length - current length                                // >0                        int m;                        for (m = 0; m <= i; m++) {                            substring[m] = predefc[m];                        }                        check.setText(substring.toString());                        // substring[m]='count';                        /*                         * inputans.setText(substring.toString(),                         * TextVIEw.BufferType.EDItable);                         */                    }                }            }            @OverrIDe            public voID beforeTextChanged(CharSequence s, int start, int count,                    int after) {                // Todo auto-generated method stub            }            @OverrIDe            public voID afterTextChanged(Editable s) {                // Todo auto-generated method stub            }        });    }    private voID initialisevars() {        // Todo auto-generated method stub        go = (@R_502_5554@) findVIEwByID(R.ID.bGo);        answer = (TextVIEw) findVIEwByID(R.ID.tvAns);        inputans = (EditText) findVIEwByID(R.ID.etTricky);        inputq = (EditText) findVIEwByID(R.ID.etQues);        check = (TextVIEw) findVIEwByID(R.ID.textVIEw1);    }    @OverrIDe    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @OverrIDe    public voID onClick(VIEw v) {        // Todo auto-generated method stub        switch (v.getID()) {        case R.ID.bGo: {            answer.setText(ans.toString());         }            break;        }    }}

解决方法:

在AndroID文档中,您可以阅读:

public abstract voID onTextChanged (CharSequence s, int start, int
before, int count) Added in API level 1

This method is called to notify you that, within start, the before
characters beginning at @OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); initialisevars(); go.setEnabled(false); go.setonClickListener(this); inputans.addTextChangedListener(new TextWatcher() { @OverrIDe public voID onTextChanged(CharSequence s, int start, int before, int count) { if ((s.length() - before) > 0) { // Check if text is longer than before changing char current = s.charat(before); if (current == '.' || s.length() >= 24) { check.setText(predef); go.setEnabled(true); } else { check.setText(s); } } } @OverrIDe public voID beforeTextChanged(CharSequence s, int start, int count, int after) { // Todo auto-generated method stub } @OverrIDe public voID afterTextChanged(Editable s) { // Todo auto-generated method stub } });} have just replaced old text that had
length . It is an error to attempt to make changes to s from
this callback.

这意味着:

> s已经是一个修改过的文本(你可以通过它得到它的长度)
s.length())
> count是已添加的字符数
> start是添加了新字符的位置
>之前是更改前的文本长度

基本上要实现你想要的,我宁愿采用这种方法而不是数组:

就那么简单.

总结

以上是内存溢出为你收集整理的无法在android中正确实现textwatcher全部内容,希望文章能够帮你解决无法在android中正确实现textwatcher所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1110153.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存