2011-07-19 11 views
2

Im混乱します。画面の向きを変更するときにEditTextの値が正しくない

私はTextViewとEditTextを保持するレイアウト(LinearLayout)を持っています。 私のコードのどこかに、RelativeLayoutを作成し(プログラムで)、このLinearLayoutsのいくつかをプッシュします。それらのそれぞれに、TextViewとEditTextのIDと値を設定します。

問題は、画面の向きを変更するときです。すべてのEditTextコントロールは、(最後のEditTextから)同じ値を取得します。私がブレークポイントを設定すると、すべてうまく見えます。私はsetContentViewが呼び出される前にすべてのelemetsを調べて、すべての値がうまくいくように見えました。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    csWgs84 = getCoordinateSystem(); 
    wgs84C = getCoordinates(); 
    sView = new ScrollView(this); 
    layout = getLayoutInflater().inflate(R.layout.location_calculator, null); 

    View control1 = getLayoutInflater().inflate(R.layout.text_edit, null); 
    control1.setId(1); 
    TextView title1 = (TextView) control1.findViewById(R.id.title); 
    title1.setText(csWgs84.axisInfo.yAxisAbbreaviation + " [°] :"); 
    EditText value1 = (EditText) control1.findViewById(R.id.input); 
    value1.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); 
    value1.setText(cutValue(RSimpleFormatter.formatNumber(wgs84C.y, 1, 7, '.'), 12)); 
    RelativeLayout.LayoutParams viewLayoutParams1 = new RelativeLayout.LayoutParams 
    (RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT); 
     viewLayoutParams1.addRule(RelativeLayout.BELOW, group.getId()); 
    ((RelativeLayout) layout).addView(control1, viewLayoutParams1); 

    View control2 = getLayoutInflater().inflate(R.layout.text_edit, null); 
    control2.setId(2); 
    TextView title2 = (TextView) control2.findViewById(R.id.title); 
    title2.setText(csWgs84.axisInfo.xAxisAbbreaviation + " [°] :"); 
    EditText value2 = (EditText) control2.findViewById(R.id.input); 
    value2.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); 
    value2.setText(cutValue(RSimpleFormatter.formatNumber(wgs84C.x, 1, 7, '.'), 12)); 
    RelativeLayout.LayoutParams viewLayoutParams2 = new RelativeLayout.LayoutParams 
    (RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT); 
    viewLayoutParams2.addRule(RelativeLayout.BELOW, control1.getId()); 
    ((RelativeLayout) layout).addView(control2, viewLayoutParams2); 

    sView.addView(layout, scrollViewLayoutParams); 
    setContentView(sView); 
} 
+0

私はまったく同じ問題を抱えていました。解決策が何であったのか覚えていません。申し訳ありません。私が覚えていれば私は答えます。コードの関連部分を投稿すると、他の人が答えるのに役立つかもしれません。 – Merlin

答えて

2

デフォルトのonPause()メソッドがあなたのアクティビティをメモリにプッシュしてリロードされている場合は、オーバーライドする必要があります。

プログラムで作成されたフィールドの値をバンドルに保存するには、onPauseを使用します。あなたのonCreateメソッドでは、バンドルが存在するかどうかをチェックし、そこからビューを作成します。

Activity Lifecycle

+0

わかりました。しかし、現時点では値を保存する必要はありません。フィールドの値を保持するオブジェクトが画面の向きの前と同じであるようにしてください(このオブジェクトからのedittextコントロールの読み込み)。限り、私が言うことができる...それは動作するはずです。 – no9

1

参照には注意してください:

は、ここでは、コードの関連する部分です。たぶんあなたはすべてのEditTextを "プログラム的に"作成して、最後のものを何度か変更するだけです。

コードを投稿すると便利です。

+0

私はそうは思わない。私がコントロールを調べるならば、すべてうまくいくようだ。 ID、値..すべて。 – no9

+0

また、問題は1つのEditTextを変更するのではなく、すべてのEditTextコントロールが(最後のものから)同じ値を取得することです。 – no9

1

チェックthisまたはthis。私はあなたが方向変更の間にEditTextの内容を保存していないと思います。

+0

はい、あなたは正しいです。現在は何も保存していません。しかしそれはまだ各EditTextのための初期値と同じ値ではないはずです。 – no9

8

私は同じ問題を抱えていました。私はなぜそれが起こるのか分からない。それは私の活動の一つで起こりますが、私が思うにはほとんど同じです。私はそれを広範囲に調査していない。

はしかし、私は回避策を思い付いた:onResume()ではなく、onCreate()にEditTextsを移入します。(私もonStartでそれらを実装しようとしましたが、同じフォールトがあります)。このスレッドを読んでいるあなたや他の誰かのためにうまくいくことを願っています。

+0

+10000は、これがなぜ起こるかを説明するものです –

0

このような場合には必ず、私は私のXMLレイアウトから

android:textIsSelectable="true" 

を削除することによってこの問題を解決することができたわけではありません。

関連する問題