0

ビューを動的に追加しています。ということは、 最初はEditTextButton Add、が 1 つありButton Submitます。

Button Add1. OnClick のI'm inflating new layout にはEditText、 と がありButton Removeます。Button Add押し続けると、それぞれ膨張したレイアウトが追加されます。

2.OnClick は Inflatedレイアウトの値Button Submitを Toast する必要があります。EditText

最後のEditTextトーストしか表示されず、残りのトーストは表示されEditTextませんでした。これを行う方法?

public class MainActivity extends Activity implements OnClickListener {
Button add, submit;
ArrayList<View> viewList;
LinearLayout lin_layout;
EditText et1, et2;
String s1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    et1 = (EditText) findViewById(R.id.editText1);
    add = (Button) findViewById(R.id.button_add);
    submit = (Button) findViewById(R.id.bSubmit);
    lin_layout = (LinearLayout) findViewById(R.id.linearLayout_view);
    viewList = new ArrayList<View>();
    add.setOnClickListener(this);
    submit.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.button_add:
        if (et1.length() == 0) {
            Toast.makeText(getApplicationContext(),
                    "Filed cant be left empty", 0).show();
        } else {
            LayoutInflater layoutInflater = (LayoutInflater) getBaseContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final View addView = layoutInflater.inflate(
                    R.layout.inflate_layout, null);
            et2 = (EditText) addView.findViewById(R.id.edit);

            viewList.add(addView);
            lin_layout.addView(addView);

            Button remove = (Button) addView
                    .findViewById(R.id.button_remove);
            remove.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    lin_layout.removeView((View) v.getParent());
                    viewList.remove((View) v.getParent());

                }
            });

        }
        break;
    case R.id.bSubmit:
        s1 = et2.getText().toString();
        Toast.makeText(getApplicationContext(), "items: " + s1,Toast.LENGTH_SHORT).show();
        break;
    }

}

 }
4

1 に答える 1

1

解決策は非常に簡単です。ローカルで editText のインスタンスを作成するだけで動作します :) 今、すべてがうまくいっていますが、古い edittext を参照するために使用すると問題が発生します

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.button_add:
        if (et1.length() == 0) {
            Toast.makeText(getApplicationContext(), "Filed cant be left empty", 0).show();
        } else {
            LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final View addView = layoutInflater.inflate(R.layout.inflate_layout, null);
            EditText et2 = (EditText) addView.findViewById(R.id.edit);
            viewList.add(addView);
            lin_layout.addView(addView);
            Button remove = (Button) addView.findViewById(R.id.button_remove);
            remove.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    lin_layout.removeView((View) v.getParent());
                    viewList.remove((View) v.getParent());
                }
            });
        }
        break;
    case R.id.bSubmit:
        s1 = et2.getText().toString();
        Toast.makeText(getApplicationContext(), "items: " + s1, Toast.LENGTH_SHORT).show();
        break;
    }
}
于 2013-05-22T18:46:26.633 に答える