0

1 つの編集テキスト ボックスを含むダイアログ ボックスを設定しました。許可される文字の最大数にセット フィルターを使用しましたが、最小のフィルターが表示されません。ユーザーが 8 文字未満を入力した場合、入力したテキストに "x" を追加するコードを追加しました。コードはコンパイルされますが、クラッシュします。エラーは「9より長い文字列」をスローします。そして (piece.length() として 16) を与えます。解決に役立つ可能性があります

      public void onClick(View item) {

  final EditText input = new EditText(this);

  switch (item.getId()) {
  case R.id.textView1:
  strEditText = Title1.getText().toString(); // OK

  input.setText(strEditText);
  input.setFilters(new InputFilter[] { new InputFilter.LengthFilter(8) }); // Set max # of charactures for Input


        for (int i = 0; i < strEditText.length(); i++) {                            //
            String piece = strEditText;                                             //

            String toBeAdded = "";                                                  //
            if (piece.length() < 8) {
                int length = piece.length();
                toBeAdded = piece;
                while (length < 8) {
                    toBeAdded = toBeAdded + "X";
                    length++;
                }
            } else if (piece.length() > 8) {
                throw new IllegalArgumentException("Error, string longer than 9");
            } else {
                toBeAdded = piece;
            }
            strEditText = strEditText + toBeAdded;

        }// return to for-loop                                                      //

        new AlertDialog.Builder(ElsEditTitles.this)

        .setTitle("Ttile").setView(input).setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {

                strReturn = input.getText().toString();
                Title1.setText(strReturn);

            }
        }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                // Do nothing.
            }
        }).show();

        break;
4

1 に答える 1

0

なぜこれを入れるのか理解できません : for (int i = 0; i < strEditText.length(); i++)

たとえば、EditText が 'abc' の場合、strEditText は 'abc' で、3 回繰り返します。初めて toBeAdded = 'abcXXXXX' で、コード「strEditText = strEditText + toBeAdded;」の場合 strEditText = 'abcabcXXXXX' を実行し、それが 2 番目のループに入ると、すでに 8 文字を超えており、エラーがスローされます。

私の悪い英語でごめんなさい..

于 2013-10-19T00:50:55.027 に答える