在Edittext Android中生成序列号

时间:2013-02-26 05:09:56

标签: android android-edittext

当我按下回车键时,我想在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.)这是第三句

我想在随机行中插入新行时更新整数 现在我需要你的帮助来解决它。

谢谢!

2 个答案:

答案 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 && ...

然后添加其余部分。