0

私は Android にビューを動的に追加していますが、意味をなさない非常に奇妙な結果が表示されています。バグを示すコードは次のとおりです。

private static int count = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    count++;

    // Allow 'up' action for actionBar
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setTitle("TEST");
    setContentView(R.layout.test);

    LinearLayout testLinear = (LinearLayout)findViewById(R.id.testLinear);

    LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View view = inflater.inflate(R.layout.job_step_text, null, false);
    TextView title = (TextView) view.findViewById(R.id.jobStepTextTextView);
    final EditText editText = (EditText)view.findViewById(R.id.jobStepEditText);
    title.setText("Field 1");
    editText.setText("Value 1");

    testLinear.addView(view);

    if(count == 1) {
        View view2 = inflater.inflate(R.layout.job_step_text, null, false);
        TextView title2 = (TextView) view2.findViewById(R.id.jobStepTextTextView);
        final EditText editText2 = (EditText)view2.findViewById(R.id.jobStepEditText);
        title2.setText("Field 2");
        editText2.setText("Value 2");

        testLinear.addView(view2);
    }

}

アクティビティの最初のラウンドは次のとおりです。

フィールド 1: [値 1 ]

フィールド 2: [値 2]

次に、デバイスが回転すると、次のように表示されます。

フィールド 1: [値 2]

誰でも助けることができますか?初めて行を一周した後は次のようになります。

final EditText editText = (EditText)view.findViewById(R.id.jobStepEditText);

古い参照を取得していて、setText() を呼び出していませんか? 画面が回転すると、テキスト フィールドを「値 2」に設定するコード行は呼び出されませんが、それがフィールド 1 テキスト ボックスの結果です。

誰でも助けることができますか?

ちなみに、これを修正する方法は、ビューに追加する前に各 EditText に一意の IDを与えることです...しかし、それは意味がありません...確かに、膨張したビューには他のビュー (過去または現在) の知識がありませんtestLinear.addView(view) まで; 追加されますか?

前もって感謝します。

4

1 に答える 1