当我按下回车键时,我想在EditText中生成序列号
详细说明:
每次我想在edittext中第一次写一个字符都应该以这个字符串开头 - > “1”
在我写完句子并按下输入按钮(新行)后,下一个句子应该从下一个序列号开始
例如: 当我第一次在edittext中写这样的
时这是第一句话
,它应该是这样的
1。)这是第一句话
然后当我按下回车按钮写下这样的下一句话
这是第二句话
应该是这样的
2。)这是第二句
我尝试编写代码,但是当我尝试在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)
5.)这是第三句
问题是,为什么它被执行了两次?
而且,当我按下enter按钮在第2行插入一个新行时,结果就像这样:
1。)这是第一句话 2.)这是第二句 3)
4)
3.)这是第二句 4)
5.)这是第三句
我想在随机行中插入新行时更新整数 现在我需要你的帮助来解决它。
谢谢!
答案 0 :(得分:0)
我认为您需要从下面的行中删除\n
mET.getText().insert(startCursor, "\n" + String.valueOf(getCurrentCursorLine(mET)+2) + ".) ");
因为键盘输入已添加新行。之后你再次换上新的一行。
因此,请从该行中删除"\n" +
。
答案 1 :(得分:0)
您可能已经或可能没有找到答案。但我相信问题是你将“mET”设置为“onKey”,我相信它们都在做“onKeyDown”和“onKeyUp”。因此,这可能是为什么它会执行两次操作,因为您正在按下并释放输入/按钮中心键。
所以你需要做的就是先添加
...keyCode == KeyEvent.KEYCODE_ENTER || KeyEvent.KEYCODE_DPAD_CENTER...
在...之前添加此内容
...event.getAction() == KeyEvent.ACTION_DOWN && ...
然后添加其余部分。