1

Enterボタンを押したときにEditTextにシーケンス番号を生成したい。
詳細説明 :
edittext で初めて文字を書きたい場合は、常にこの文字列 --> "1" で開始する必要があります。
そして、文を書き終えてエンターボタン(改行)を押すと、次の文は次のシーケンス番号で始まるはずです

例:このように初めてedittextに書き込むとき

これは最初の文です

、それはこのようにする必要があります

1.) これは最初の文です

そして、Enterボタンを押して次の文をこのように書くと

これは2番目の文です

このようにする必要があります

2.) これは 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.) これは 2 番目の文です
4.)
5.) これは 3 番目の文です

問題は、なぜ 2 回実行されたのかということです。

そして、たとえば2行目にEnterボタンを押して新しい行を挿入すると、結果は次のようになりました。

1.) これは最初の文です
2.) これは 2 番目の文です
3.)
4.)
3.) これは 2 番目の文です
4.)
5.) これは 3 番目の文です

ランダムな行に新しい行を挿入したときに整数を更新したい。
今、私はそれを修正するためにあなたの助けが必要です.

ありがとう!

4

2 に答える 2

0

あなたはすでに答えを見つけているかもしれませんし、そうでないかもしれません。しかし、問題は、「mET」を「onKey」に設定して、「onKeyDown」と「onKeyUp」の両方を行っていることだと思います。エンター/十字キーの中央キーを押して放すため、アクションが 2 回実行されるのはそのためかもしれません。

したがって、実際に行う必要があるのは、前に追加することだけです

...keyCode == KeyEvent.KEYCODE_ENTER || KeyEvent.KEYCODE_DPAD_CENTER...

これを前に追加...

...event.getAction() == KeyEvent.ACTION_DOWN && ...

次に、残りを追加します。

于 2014-03-06T01:43:13.180 に答える
0

\n下の行から削除する必要があると思います

mET.getText().insert(startCursor, "\n" + String.valueOf(getCurrentCursorLine(mET)+2) + ".) ");

キーボードからの入力はすでに新しい行を追加しているためです。その後、もう一度新しい行を追加します。

したがって、"\n" +その行から削除します。

于 2013-02-26T05:34:49.400 に答える