条件に応じて動的に EditTextFields を作成したい。条件は、最初の EditTextField で入力を開始すると、下部にもう 1 つ EditTextField が作成され、2 番目の入力を開始すると 3 番目の EditTextField が作成されることです。同様に、上部の EditTextField にテキストがない場合は、下部のテキストを削除したいと考えています。ありがとう。
3 に答える
ScrollView
コンテンツの柔軟な情報を追加できることがわかっているような、親ビューを使用します。次に、TextWatcher
a/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
。
必要な 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);
User TextWatcher TextWatcher とオーバーライド メソッドを使用して Activity を実装する
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}