在Edittext Android中生成序列号
当我按下enter按钮时,我想在EditText中生成序列号。在Edittext Android中生成序列号,android,android-edittext,Android,Android Edittext,当我按下enter按钮时,我想在EditText中生成序列号。 详细说明: 每次我想在edittext中首次写入字符时,都应该以以下字符串开头-->“1”。 在我写完句子并按下回车键(新行)后,下一个句子应该以下一个序列号开始 例如: 当我第一次这样写edittext的时候 这是第一句话 ,应该是这样的 这是第一句话 然后当我按下回车键写下一句话时 这是第二句话 应该是这样的 这是第二句话 我尝试编写代码,但在尝试编写EditText中的第一个字符时出现了意外结果 这是我的全部代码: publi
详细说明:
每次我想在edittext中首次写入字符时,都应该以以下字符串开头-->“1”。
在我写完句子并按下回车键(新行)后,下一个句子应该以下一个序列号开始 例如: 当我第一次这样写edittext的时候 这是第一句话 ,应该是这样的 这是第一句话 然后当我按下回车键写下一句话时 这是第二句话 应该是这样的 这是第二句话 我尝试编写代码,但在尝试编写EditText中的第一个字符时出现了意外结果
这是我的全部代码:
public class MainActivity extends Activity {
private EditText mET;
public int getCurrentCursorLine(EditText editText)
{
int selectionStart = Selection.getSelectionStart(editText.getText());
Layout layout = editText.getLayout();
if (!(selectionStart == -1)) {
return layout.getLineForOffset(selectionStart);
}
return -1;
}
private final TextWatcher mTextEditorWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
mET.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
int startCursor = 0;
startCursor = mET.getSelectionStart();
if (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
mET.getText().insert(startCursor, "\n" + String.valueOf(getCurrentCursorLine(mET)+2) + ".) ");
return true;
}
return false;
}
});
}
@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
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mET = (EditText) findViewById(R.id.mEditText);
Editable text = mET.getText();
text.insert(mET.getSelectionStart(), "1.) ");
mET.addTextChangedListener(mTextEditorWatcher);
}
@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;
}
}
这就是我的全部代码。通过使用上面的代码,结果如下所示: 1.)这是第一句话
2.
3.)这是第二句话
4.
这是第三句话 问题是,为什么要执行两次 例如,当我按下enter按钮在第2行中插入新行时,结果如下所示: 1.)这是第一句话
2.)这是第二句话
3.
4.
3.)这是第二句话
4.
这是第三句话 我想在随机行中插入新行时更新整数。
现在我需要你的帮助来修复它
谢谢 我认为您需要从下一行中删除
\n
mET.getText().insert(startCursor, "\n" + String.valueOf(getCurrentCursorLine(mET)+2) + ".) ");
因为键盘上的enter键已经添加了新行。在那之后,你再放一条新的线
因此,从该行中删除
“\n”+
。您可能已经找到答案,也可能没有。但我相信问题在于你把“mET”设置为“onKey”,我相信这是在做“onKeyDown”和“onkeydup”。这可能就是为什么它会执行两次操作,因为您正在按下并释放enter/d-pad中心键
所以你真正需要做的就是在
...keyCode == KeyEvent.KEYCODE_ENTER || KeyEvent.KEYCODE_DPAD_CENTER...
将此添加到
...event.getAction() == KeyEvent.ACTION_DOWN && ...
然后再加上剩下的。谢谢你的回答。我试过你的建议,但没用\n'是必需的,因为当我按下“回车”键时,startCursor不在新行中。所以,如果我们删除“\n”,该行仍然执行了两次,但没有新行。