
嘿家伙我正在寻找一种方法来找出用户在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 1This method is called to notify you that, within
start, thebefore
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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)