在Edittext Android中生成序列号

在Edittext Android中生成序列号,android,android-edittext,Android,Android Edittext,当我按下enter按钮时,我想在EditText中生成序列号。 详细说明: 每次我想在edittext中首次写入字符时,都应该以以下字符串开头-->“1”。 在我写完句子并按下回车键(新行)后,下一个句子应该以下一个序列号开始 例如: 当我第一次这样写edittext的时候 这是第一句话 ,应该是这样的 这是第一句话 然后当我按下回车键写下一句话时 这是第二句话 应该是这样的 这是第二句话 我尝试编写代码,但在尝试编写EditText中的第一个字符时出现了意外结果 这是我的全部代码: publi

当我按下enter按钮时,我想在EditText中生成序列号。
详细说明:
每次我想在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”,该行仍然执行了两次,但没有新行。