0

条件に応じて動的に EditTextFields を作成したい。条件は、最初の EditTextField で入力を開始すると、下部にもう 1 つ EditTextField が作成され、2 番目の入力を開始すると 3 番目の EditTextField が作成されることです。同様に、上部の EditTextField にテキストがない場合は、下部のテキストを削除したいと考えています。ありがとう。

4

3 に答える 3

2

ScrollViewコンテンツの柔軟な情報を追加できることがわかっているような、親ビューを使用します。次に、TextWatchera/k/aaテキスト変更リスナーを使用します。ScrollView次に、テキストがフィールドに入力された場合に追加する新しいテキスト ビューを作成できますEditText

きちんとしたものにするために、TextViewこのテキスト変更リスナーとレプリケーション チェックを格納するカスタム クラスを作成することになるでしょう。を追加する方法の例を次に示しますTextView

//instance variable
private LinearLayout containerLayout;
private newTextViewCreated = false;
//initialize your conatinerLayout before you use it
//and create your first edit text field
public void onCreate(Bundle savedInstaceState){
   containerLayout = (LinearLayout)findViewById(R.id.conatinerLinearLayout);
   createEditText();
}

private void createEditText(){
    EditText editText = new editText(this);
    editText.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(count > 0 && !newTextViewCreated){
                createEditText();
                newTextViewCreated = true;
            }           
        }

        @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  
        }
    });
    containerLayout.addView(editText);
}

私はこれをテストしていません。今書いていますが、これが私が考えていることです。TextWatcherがどのように機能するかの説明を読んで、内部メソッドを理解してください。条件をいじる必要がありますが、入力された文字数の変化をリッスンし、各テキストビューに文字が追加されたときに追加のビューを作成するために再帰呼び出しを行います。ビューがいつ作成されたかを示すブール値フラグを使用するので、char が変更されるたびにフラグを追加しません。あなたのコメントに基づいて createEditText メソッドの外に移動しました。独自のEditTextクラスを作成した場合は、これが別のクラスにまたがったかどうかのステータスを設定/取得するメソッドを追加するだけですTextView

于 2013-09-27T15:21:22.430 に答える
0

必要な editText フィールドの合計量がわかっている場合、または次のようにプログラムで追加する場合は、レイアウトでそれらを表示/非表示にします。

EditText myET = new EditText(MyActivity.this);
myET.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
LayoutContentView.addView(myET);

次に確認します。

if (myET.getText().toString().trim().equals(""))
{
  //Don't Show
}else{
   //SHOW
}

SOの質問が役立つ可能性があります: https://stackoverflow.com/a/6792359/350421

EditText toAdd = new EditText(this);
list.add(toAdd);
于 2013-09-27T15:23:35.277 に答える
0

User TextWatcher TextWatcher とオーバーライド メソッドを使用して Activity を実装する

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
于 2013-09-27T15:26:45.317 に答える